pdf-icon

UIFlow Guide

UIFlow 1.0 Blockly

Event

Unit

UIFlow 1.0 Project

Module Lan Base

案例程序

初始化一个TCP服务器,通过指定的IP和端口建立连接,并在循环中随机生成数据包发送,同时监控是否有可用的数据包接收,并打印接收的数据包大小

from m5stack import *
from m5ui import *
from uiflow import *
import module
import time

setScreenColor(0x222222)

counter = None

lan = module.get(module.LANBASE)

import random

counter = 0
print('Start the TCP Server')
print((str('Local IP address:') + str((lan.local_ip()))))
lan.tcp_udp_config('192.168.1.97', 55005, 1, 1)
print('TCP Connected')
print((str('Remote IP address:') + str((lan.remote_ip()))))
while True:
  counter = random.randint(100000, 999999)
  lan.tcp_send_packet(str(counter))
  wait(1)
  if lan.is_available_packet(1):
    print((str('TCP receive packet size') + str((lan.tcp_receive_packet(0)))))
  wait(1)
  wait_ms(2)

功能说明

lan.is_available_packet(1)
  • 这个选项块表示当前可以使用的包协议为TCP
 lan.get_ezdata(ezdata_get_fOkSZcb, 'GCJ3Ic5h2eXnzV3rT3bBXvrncCaJnART', '')
  • 从指定的主题获取值,并使用提供的token进行验证
lan.remove_ezdata('GCJ3Ic5h2eXnzV3rT3bBXvrncCaJnART', '')
  • 删除与指定主题相关的数据,使用token进行验证
lan.set_ezdata('GCJ3Ic5h2eXnzV3rT3bBXvrncCaJnART', '', '', 0)
  • 保存一个值到指定的主题,同样使用token进行验证,并可以选择保存的模式(如Single)
req.text
  • 从局域网中获取数据
lan.get_if_config()
  • 检查配置是否存在或获取当前配置
req.status_code
  • 获取状态码,返回一个整数值
try:
    req = lan.http_request(method='GET', url='', headers={})
    gc.collect()
    req.close()
  except:
    pass
  • Method:指定HTTP请求的方法,如GET。
  • URL:要请求的URL地址。
  • Headers:可以通过创建一个映射来设置请求的头信息。
  • Data:通过映射发送数据。
  • Success和Fail:请求成功或失败后的回调操作
lan.tcp_udp_config('', 0, 1, 1)
  • remote IP:远程设备的IP地址。
  • port:通信端口。
  • socket type:选择通信协议类型(TCP或UDP)。
  • machine type:指定是服务器还是客户端
lan.local_ip()
  • 获取本地设备的IP地址
lan.modbus_init(15, 5, 115200, 1, 1)
  • bandrate:设置波特率,这里为115200。
  • mode:选择主设备或从设备模式。
  • slave addr:设置从设备的地址
modbus.read_coils(1, 1, 0)
  • slave address:读取从设备的地址。
  • starting address:开始读取的寄存器地址。
  • coil qty:读取的线圈数量
modbus.read_discrete_inputs(1, 1, 0)
  • 从从设备的离散输入寄存器中读取数据。
    • slave address:从设备的地址。
    • starting address:开始读取的寄存器地址。
    • input qty:读取的输入数量
modbus.read_holding_registers(1, 1, 0, True)
  • 从从设备的保持寄存器中读取数据。
    • slave address:从设备的地址。
    • starting address:开始读取的寄存器地址。
    • register qty:读取的寄存器数量。
    • signed:指定数据是否为有符号数
modbus.read_input_registers(1, 1, 0, True)
  • 从设备的输入寄存器中读取数据。
    • slave address:从设备的地址。
    • starting address:开始读取的寄存器地址。
    • register qty:读取的寄存器数量。
    • signed:指定数据是否为有符号数
modbus.write_multiple_coils(1, 1, 0)
  • 向从设备的多个线圈寄存器写入数据。
    • slave address:从设备的地址。
    • starting address:开始写入的寄存器地址。
    • output value:写入的输出值
modbus.write_multiple_registers(1, 1, 0, True)
  • 向从设备的多个保持寄存器写入数据。
    • slave address:从设备的地址。
    • starting address:开始写入的寄存器地址。
    • register value:写入的寄存器值。
    • signed:指定数据是否为有符号数
modbus.write_single_coil(1, 1, 0)
  • 向从设备的单个线圈寄存器写入数据。
    • slave address:从设备的地址。
    • output address:线圈寄存器的地址。
    • output value:要写入的值
modbus.write_single_register(1, 1, 0, True)
  • 向从设备的单个保持寄存器写入数据。
    • slave address:从设备的地址。
    • register address:寄存器的地址。
    • register value:要写入的寄存器值。 
    • signed:数据是否为有符号数
lan.modbus_init(15, 5, 115200, 1, 1)
  • 设置功能码,用于指定Modbus命令。
    • READ_COILS_STATUS:读取线圈状态的功能码
modbus.find_address
  • 获取从设备的地址
modbus.find_function
  • 获取当前的功能码
modbus.find_quantity
  • 获取数据量。用于查询读取/写入的寄存器数量
modbus.function_init(1, 0, 0)
  • 初始化功能码和相关参数。
    • READ_COILS_STATUS:读取线圈状态的功能码。
    • start addr:开始地址。
    • quantity:读取或操作的线圈数量
modbus.receive_req_create_pdu()
  • 接收ADU(Application Data Unit)请求,Modbus主机与从机之间的数据交换使用ADU来传输
modbus.create_slave_response(1)
  • 发送ADU响应数据,提供给Modbus主机响应数据
modbus.update_process(1, 0, 0, [0, 0, 0])
  • 更新功能的数据信息。
    • start addr:要操作的开始地址。
    • quantity:更新的数据数量。
    • value:实际要更新的值
lan.mqtt_is_connect()
  • 检查与MQTT服务器的连接状态
lan.mqtt_connect()
  • 连接到MQTT服务器
lan.mqtt_disconnect()
  • 从MQTT服务器断开连接
lan.mqtt_config('mqtt.m5stack.com', 1883, '', '', '', 120)
  • 初始化
    • mqtt.m5stack.com:服务器地址。
    • port 1883:通讯端口。
    • client id:客户端标识符。
    • username:用户名。
    • password:密码。
    • keepalive 120:保持连接的心跳时间(秒)
  lan.mqtt_poll_loop()
  • 用于轮询从MQTT服务器接收的下行消息,即检查是否有新的消息从服务器传送到设备端
lan.mqtt_publish('', '', 0)
  • 用于发布消息到指定的主题。设备可以通过该语句向其他订阅了相同主题的设备发送消息
    • topic:发布消息的主题。
    • payload:要发送的消息内容。
    • QoS:服务质量等级(通常0表示消息最多发送一次,不要求确认)
lan.mqtt_subscribe('', lan_base_mqtt_cb, 0)
  • 用于订阅某个主题,以接收该主题下发布的消息
    • topic:需要订阅的主题,订阅后设备将接收来自该主题的消息。
    • QoS:控制订阅消息的服务质量等级
def lan_base_mqtt_cb(lan_mq_topic, lan_mq_payload):
  global ezdata_value1, lan_topic, lan_msg
  lan_topic = lan_mq_topic
  lan_msg = lan_mq_payload
  pass
  • 当设备接收到订阅主题的消息时,该语句会触发回调函数,并显示接收到的主题和消息内容。
    • lan_topic:接收到的消息所属的主题。
    • lan_msg:接收到的消息内容
lan.remote_ip()
  • 设置远程服务器的IP地址
lan.set_if_config('192.168.1.100', '255.255.255.0', '192.168.1.1', '8.8.8.8')
  • 配置设备的IP地址、子网掩码、网关和DNS信息
lan.socket_close()
  • 关闭当前的TCP或UDP连接
lan.tcp_receive_packet(0)
  • 设置TCP接收数据包的大小
 lan.tcp_send_packet('1234')
  • 发送指定的数据包内容通过TCP协议
modbus._mdbus_uart.any()
  • 检查并保留UART缓存中的数据
modbus._mdbus_uart.read()
  • 读取UART缓存中的所有数据
modbus._mdbus_uart.readline()
  • 读取UART缓存中的一整行数据,直到遇到换行符为止
modbus._mdbus_uart.read(10)
  • 读取指定数量的字符
modbus._mdbus_uart.write('')
  • 通过UART发送指定的字符串数据
modbus._mdbus_uart.write(''+"\r\n")
  • 通过UART发送一行字符串数据,通常会在末尾附加换行符
modbus._mdbus_uart.write(bytes([0, 0, 0]))
  • 通过UART发送一个原始数据列表,通常用于传输二进制数据
lan.udp_receive_packet(0)
  • 设置接收UDP数据包的大小
lan.udp_send_packet('', 0, '')
  • 通过指定的IP地址、端口号和有效载荷发送UDP数据包
On This Page