Files
pico-platform/docs/examples/eth_code/Python/RP2040-ETH-MQTT/RP2040-ETH-MQTT.py

86 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from machine import UART, Pin
from mqtt_client import MQTTClient
from ch9120 import CH9120
import time
# MQTT
CLIENT_ID = "Waveshare_RP2040_ETH"
SUBSCRIBE_TOPIC = "test_topic1"
PUBLISH_TOPIC = "test_topic2"
# CH9120
MODE = 1 #0:TCP Server 1:TCP Client 2:UDP Server 3:UDP Client
GATEWAY = (192, 168, 1, 1) # GATEWAY
TARGET_IP = (47, 92, 129, 18) # TARGET_IP
LOCAL_IP = (192, 168, 1, 200) # LOCAL_IP
SUBNET_MASK = (255,255,255,0) # SUBNET_MASK
LOCAL_PORT1 = 1000 # LOCAL_PORT1
TARGET_PORT = 1883 # TARGET_PORT
BAUD_RATE = 115200 # BAUD_RATE
uart1 = UART(1, baudrate=9600, tx=Pin(20), rx=Pin(21))
def ch9120_configure():
global uart1
ch9120 = CH9120(uart1)
ch9120.enter_config() # enter configuration mode
ch9120.set_mode(MODE)
ch9120.set_localIP(LOCAL_IP)
ch9120.set_subnetMask(SUBNET_MASK)
ch9120.set_gateway(GATEWAY)
ch9120.set_localPort(LOCAL_PORT1)
ch9120.set_targetIP(TARGET_IP)
ch9120.set_targetPort(TARGET_PORT)
ch9120.set_baudRate(BAUD_RATE)
ch9120.exit_config() # exit configuration mode
# Clear cache and reconfigure uart1
uart1.read(uart1.any())
time.sleep(0.5)
uart1 = UART(1, baudrate=115200, tx=Pin(20), rx=Pin(21))
if __name__ == "__main__":
ch9120_configure()
mqtt_client = MQTTClient(uart1)
mqtt_client.ClientID = CLIENT_ID # Set ClientID
mqtt_client.connect() # Connect to MQTT server
mqtt_client.subscribe(SUBSCRIBE_TOPIC) # Subscribe to topictest_topic1
mqtt_client.send_heartbeat()
last_heartbeat_time = time.time()
time.sleep_ms(60) # Sending the first heartbeat
uart1.read() # Clear unnecessary data
while True:
rxData = uart1.read()
if rxData is not None:
topic, message = mqtt_client.extract_data(rxData) # Parse the received data
if topic == SUBSCRIBE_TOPIC:
print("Topic:", topic)
print("Message:", message)
mqtt_client.publish(PUBLISH_TOPIC, message) # Send received data to topictest_topic2
current_time = time.time()
if current_time - last_heartbeat_time >= 30:
mqtt_client.send_heartbeat() # Send a heartbeat every 30 seconds
last_heartbeat_time = current_time
time.sleep_ms(60) # Waiting for the server to respond
if not mqtt_client.check_heartbeat_response():
while True:
print("Reconnecting...")
mqtt_client = MQTTClient(uart1)
mqtt_client.ClientID = CLIENT_ID # Set ClientID
mqtt_client.connect() # Connect to MQTT server
mqtt_client.subscribe(SUBSCRIBE_TOPIC) # Subscribe to topictest_topic1
time.sleep_ms(200) # Waiting for the server to respond
uart1.read() # Clear unnecessary data
mqtt_client.send_heartbeat() # Sending the first heartbeat
last_heartbeat_time = current_time # Clear unnecessary data
time.sleep_ms(60) # Waiting for the server to respond
if mqtt_client.check_heartbeat_response():
print("Reconnection successful!")
break
time.sleep_ms(20)