86 lines
3.4 KiB
Python
86 lines
3.4 KiB
Python
|
|
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 topic:test_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 topic:test_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 topic:test_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)
|
|||
|
|
|
|||
|
|
|