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

86 lines
3.4 KiB
Python
Raw Normal View History

2025-07-27 19:07:40 -04:00
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)