网站建设开发模式h5,计算机网站开发项目,罗湖企业网站建设,wordpress调用分类描述文章目录 1. 前言2. 平台操作流程3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代#xff0c;MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发… 文章目录 1. 前言2. 平台操作流程3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代MicroPython和树莓派PICO正以其独特的优势引领着嵌入式开发的新潮流。MicroPython作为一种精简优化的Python 3语言为微控制器和嵌入式设备提供了高效开发和简易调试的 当我们结合WIZnet W5100S/W5500网络模块MicroPython和树莓派PICO的开发潜力被进一步放大。这两款模块都内置了TCP/IP协议栈使得在嵌入式设备上实现网络连接变得更加容易。无论是进行数据传输、远程控制还是构建物联网应用它们都提供了强大的支持。 本章我们将以WIZnet W5100S为例以MicroPython的开发方式连接至OneNET新版MQTT上并定时上报DHT11传感器的温湿度信息以及通过平台下发指令控制板载LED灯亮灭。
2. 平台操作流程
第一步创建产品 第二步创建物模型定义 第三步创建设备 第四步计算参数 需要将主题的{device-name}替换为设备名或设备ID 密码生成工具https://open.iot.10086.cn/doc/iot_platform/images/tools/token.exe
参数名参数值mqttHostUrlmqtts.heclouds.com固定不变port1883固定不变clientIdW5100S_W5500设备IDusername75w4NMRceb产品IDpasswdversion2018-10-31resproducts%2F75w4NMRceb%2Fdevices%2FW5100S_W5500et1791400694methodmd5signFTnZrF14Pqy%2F3CXggctheg%3D%3D工具计算上报温湿度主题$sys/75w4NMRceb/W5100S_W5500/thing/property/post发布权限上报回复主题$sys/75w4NMRceb/W5100S_W5500/thing/property/post/reply订阅权限设置LED状态$sys/75w4NMRceb/W5100S_W5500/thing/property/set订阅权限设置状态回复$sys/75w4NMRceb/W5100S_W5500/thing/property/set_reply发布权限 3. WIZnet以太网芯片
WIZnet 主流硬件协议栈以太网芯片参数对比
ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork PerformanceW5100STCP/IPv4 MAC PHY8bit BUS, SPI16KB4Max 25MbpsW6100TCP/IPv4/IPv6, MAC PHY8bit BUS, Fast SPI32KB8Max 25MbpsW5500TCP/IPv4, MAC PHYFast SPI32KB8Max 15Mbps
W5100S/W6100 支持 8bit数据总线接口网络传输速度会优于W5500。W6100 支持IPV6与W5100S 硬件兼容若已使用W5100S的用户需要支持IPv6可以Pin to Pin兼容。W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存
相较于软件协议栈WIZnet的硬件协议栈以太网芯片有以下优点
硬件TCP/IP协议栈WIZnet的硬件协议栈芯片提供了一种硬件实现的TCP/IP协议栈这种硬件实现的协议栈比软件实现的协议栈具有更好的性能和稳定性。不需要额外的嵌入式系统软件栈和内存资源由于所有的以太网传输和接收操作都由独立的以太网控制器处理因此不需要额外的嵌入式系统软件栈和内存资源。抵抗网络环境变化和DDoS攻击与易受网络环境变化和DDoS攻击影响的软件TCP/IP协议栈相比硬件协议栈芯片能够提供更稳定的以太网性能。适用于低规格的嵌入式系统即使在低规格的嵌入式系统中使用WIZnet的硬件协议栈芯片也可以比使用软件TCP/IP协议栈的高规格系统显示出更高效的互联网应用操作性能。 4. 示例讲解以及使用
4.1 程序流程图 4.2 测试准备
软件
ThonnyOneNET平台
硬件
W5100S IO模块 RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板DHT11温湿度传感器Micro USB 接口的数据线网线
4.3 连接方式
通过数据线连接PC的USB口当使用W5100S/W5500 IO模块连接RP2040时 RP2040 GPIO 16 ---- W5100S/W5500 MISORP2040 GPIO 17 ---- W5100S/W5500 CSRP2040 GPIO 18 ---- W5100S/W5500 SCKRP2040 GPIO 19 ---- W5100S/W5500 MOSIRP2040 GPIO 20 ---- W5100S/W5500 RST DHT11连接RP2040 RP2040 GPIO 2 ---- DHT11 dataRP2040 3V3 ---- DHT11 VCCRP2040 GND ---- DHT11 GND 通过网线直接连接PC网口或PC和设备都通过网线连接交换机或路由器LAN口
4.4 相关代码 我们直接打开mqtt_onenet_new.py文件。
第一步可以看到在w5x00_init()函数中进行了SPI的初始化。以及将spi相关引脚和复位引脚注册到库中后续则是激活网络并使用DHCP配置网络地址信息当DHCP失败时则配置静态网络地址信息。当未配置成功时会打印出网络地址相关寄存器的信息可以帮助我们更好的排查问题。
第二步连接OneNET的MQTT服务器连接失败则进入复位程序。
第三步开启定时器定时上报温湿度信息订阅主题并在主循环中等待接收消息。 需注意要将MQTT参数定义改为您的OneNET的MQTT参数 必须订阅上报回复主题可以不做处理收到消息设置主题必须回复消息否则会报错。 #import library
from umqttsimple import MQTTClient
from usocket import socket
from machine import Pin,SPI,Timer
import dht
import network
import time
import json#mqtt config
mqtt_params {}
mqtt_params[url] mqtts.heclouds.com
mqtt_params[port] 1883
mqtt_params[clientid] W5100S_W5500
mqtt_params[username] 75w4NMRceb
mqtt_params[passwd] version2018-10-31resproducts%2F75w4NMRceb%2Fdevices%2FW5100S_W5500et1791400694methodmd5signFTnZrF14Pqy%2F3CXggctheg%3D%3D
mqtt_params[pubtopic] $sys/ mqtt_params[username] / mqtt_params[clientid] /thing/property/post
mqtt_params[pubtopic_reply] $sys/ mqtt_params[username] /mqtt_params[clientid] /thing/property/post/reply
mqtt_params[subtopic] $sys/ mqtt_params[username] / mqtt_params[clientid] /thing/property/set
mqtt_params[subtopic_reply] $sys/ mqtt_params[username] / mqtt_params[clientid] /thing/property/set_replymessage_interval 5
timer_1s_count 0
tim Timer()#DHT11 definitions
pin Pin(2,Pin.OUT)
sensor dht.DHT11(pin)led Pin(25, Pin.OUT)#mqtt client
client None
W5x00 chip initialization.param: None
returns: None
def w5x00_init():#spi initspiSPI(0,2_000_000, mosiPin(19),misoPin(16),sckPin(18))nic network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pinnic.active(True)#network activetry:#DHCPprint(\r\nConfiguring DHCP)nic.ifconfig(dhcp)except:#None DHCPprint(\r\nDHCP fails, use static configuration)nic.ifconfig((192.168.1.20,255.255.255.0,192.168.1.1,8.8.8.8))#Set static network address information#Print network address informationprint(IP :,nic.ifconfig()[0])print(Subnet Mask:,nic.ifconfig()[1])print(Gateway :,nic.ifconfig()[2])print(DNS :,nic.ifconfig()[3],\r\n)#If there is no network connection, the register address information is printedwhile not nic.isconnected():time.sleep(1)print(nic.regs())
1-second timer callback function.param1: class timer
returns: None
def tick(timer):global timer_1s_countglobal clienttimer_1s_count 1if timer_1s_count message_interval:sensor.measure()timer_1s_count 0sendmsg {id: 123,version: 1.0,params: {CurrentTemperature: {value:%s},CurrentHumidity:{value:%s}}}%(str(sensor.temperature()),str(sensor.humidity()))client.publish(mqtt_params[pubtopic],sendmsg,qos 0)print(send:,sendmsg)
Connect to the MQTT server.param: None
returns: None
def mqtt_connect():client MQTTClient(mqtt_params[clientid], mqtt_params[url], mqtt_params[port],mqtt_params[username],mqtt_params[passwd],keepalive60)client.connect()print(Connected to %s MQTT Broker%(mqtt_params[url]))return client
Connection error handler.param: None
returns: None
def reconnect():print(Failed to connected to Broker. Reconnecting...)time.sleep(5)machine.reset()
Subscribe to the topic message callback function. This function is entered when a message is received from a subscribed topic.param1: The topic on which the callback is triggered
param2: Message content
returns: None
def sub_cb(topic, msg):topic topic.decode(utf-8)msg msg.decode(utf-8)if topic mqtt_params[subtopic]:print(\r\ntopic:,topic,\r\nrecv:, msg)try:parsed json.loads(msg)if(parsed[params][LEDSwitch] True):print(LED ON!)led.value(1)else:print(LED OFF!)led.value(0)sendmsg {id: %s,code: 200,msg: success}%str(parsed[id])client.publish(mqtt_params[subtopic_reply],sendmsg,qos 0)print(send:,sendmsg)sendmsg {id: 123,version: 1.0,params: {LEDSwitch: {value:%s}}}%str(parsed[params][LEDSwitch]).lower()client.publish(mqtt_params[pubtopic],sendmsg,qos 0)print(send:,sendmsg)except:print(json load error!)
Subscribe to Topics.param: None
returns: None
def subscribe():client.set_callback(sub_cb)client.subscribe(mqtt_params[subtopic],0)print(subscribed to %s%mqtt_params[subtopic])client.subscribe(mqtt_params[pubtopic_reply],0)print(subscribed to %s%mqtt_params[pubtopic_reply])def main():global clientprint(WIZnet chip MQTT of OneNET(new version MQTT) example)w5x00_init()try: client mqtt_connect()except OSError as e:reconnect()tim.init(freq1, callbacktick)subscribe()while True:client.wait_msg()if __name__ __main__:main()4.5 烧录验证 要测试以太网示例必须将开发环境配置为使用Raspberry Pi Pico。 所需的开发环境 Thonny 如果你必须编译MicroPython则必须使用Linux或Unix环境。 注意因为MicroPython的print函数是启用了stdout缓冲的所以有时候并不会第一时间打印出内容。 运行该脚本必须要有umqttsimple.py库支持如何添加umqttsimple.py库请查看MQTT协议示例 第一步将程序复制到Thonny中然后选择环境为Raspberry Pi Pico再运行
第二步可以看到此时每间隔5秒上报了一次温湿度信息并且平台上也会实时更新。 第三步可以通过云平台设置板载LED的状态 5. 注意事项
如果采用的是WIZnet的W5500来实现本章的示例则只需烧录W5500的固件并运行示例程序即可。
6. 相关链接
WIZnet官网
本章例程链接
想了解更多评论留言哦