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)
|
||
|
||
|