十二、W5100S/W5500+RP2040之MicroPython开发<MQTT旧版OneNET示例>

本文主要是介绍十二、W5100S/W5500+RP2040之MicroPython开发<MQTT旧版OneNET示例>,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 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传感器的温湿度信息。

2. 平台操作流程

第一步:创建产品

在这里插入图片描述

第二步:创建设备

在这里插入图片描述

第三步:创建数据流

在这里插入图片描述

第四步:计算参数

参数名参数值
mqttHostUrlmqtt.heclouds.com(固定不变)
port6002(固定不变)
clientId1168615815(设备ID)
username621478(产品ID)
passwd0123456789(鉴权信息)
发布主题$dp(固定不变)

3. WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max 25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max 25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  • W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  • W6100 支持IPV6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  • W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存

相较于软件协议栈,WIZnet的硬件协议栈以太网芯片有以下优点

  1. 硬件TCP/IP协议栈:WIZnet的硬件协议栈芯片提供了一种硬件实现的TCP/IP协议栈,这种硬件实现的协议栈比软件实现的协议栈具有更好的性能和稳定性。
  2. 不需要额外的嵌入式系统软件栈和内存资源:由于所有的以太网传输和接收操作都由独立的以太网控制器处理,因此不需要额外的嵌入式系统软件栈和内存资源。
  3. 抵抗网络环境变化和DDoS攻击:与易受网络环境变化和DDoS攻击影响的软件TCP/IP协议栈相比,硬件协议栈芯片能够提供更稳定的以太网性能。
  4. 适用于低规格的嵌入式系统:即使在低规格的嵌入式系统中,使用WIZnet的硬件协议栈芯片也可以比使用软件TCP/IP协议栈的高规格系统显示出更高效的互联网应用操作性能。

在这里插入图片描述

4. 示例讲解以及使用

4.1 程序流程图

在这里插入图片描述

4.2 测试准备

软件:

  • Thonny
  • OneNET平台

硬件:

  • W5100S IO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • DHT11温湿度传感器
  • Micro USB 接口的数据线
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口
  • 当使用W5100S/W5500 IO模块连接RP2040时
    • RP2040 GPIO 16 <----> W5100S/W5500 MISO
    • RP2040 GPIO 17 <----> W5100S/W5500 CS
    • RP2040 GPIO 18 <----> W5100S/W5500 SCK
    • RP2040 GPIO 19 <----> W5100S/W5500 MOSI
    • RP2040 GPIO 20 <----> W5100S/W5500 RST
  • DHT11连接RP2040
    • RP2040 GPIO 2 <----> DHT11 data
    • RP2040 3V3 <----> DHT11 VCC
    • RP2040 GND <----> DHT11 GND
  • 通过网线直接连接PC网口(或:PC和设备都通过网线连接交换机或路由器LAN口)

4.4 相关代码

  我们直接打开mqtt_onenet_old.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#mqtt config
mqtt_params = {}
mqtt_params['url'] = "mqtt.heclouds.com"
mqtt_params['port'] = 6002
mqtt_params['clientid'] = '1168615815'
mqtt_params['username'] = '621478'
mqtt_params['passwd'] = '0123456789'
mqtt_params['pubtopic'] = '$dp'
mqtt_params['pubqos'] = 0message_interval = 5
timer_1s_count =  0
tim = Timer()#DHT11 definitions
pin = Pin(2,Pin.OUT)
sensor = dht.DHT11(pin)#mqtt client
client = None"""
W5x00 chip initialization.param: None
returns: None"""
def w5x00_init():#spi initspi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(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:timer_1s_count = 0sensor.measure()msg = '{"CurrentTemperature":%s,"CurrentHumidity":%s}'%(str(sensor.temperature()),str(sensor.humidity()))datalen = len(msg)temp = list(msg)temp.insert(0,chr(datalen%0x100))temp.insert(0,chr(datalen//0x100))temp.insert(0,"\x03")msg = "".join(temp)try:client.publish(mqtt_params['pubtopic'],msg,qos = mqtt_params['pubqos'])print('send:{"CurrentTemperature":%s,"CurrentHumidity":%s}'%(str(sensor.temperature()),str(sensor.humidity())))except:print("publish error!please wait reset")machine.reset()"""
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'],keepalive=60)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() def main():global clientprint("WIZnet chip MQTT of OneNET(old version MQTT) example")w5x00_init()try: client = mqtt_connect()except OSError as e:reconnect()tim.init(freq=1, callback=tick)while True:time.sleep(1)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秒上报了一次温湿度信息,并且平台上也会实时更新。

在这里插入图片描述

5. 注意事项

  • 如果采用的是WIZnet的W5500来实现本章的示例,则只需烧录W5500的固件并运行示例程序即可。

6. 相关链接

WIZnet官网

本章例程链接

想了解更多,评论留言哦!

这篇关于十二、W5100S/W5500+RP2040之MicroPython开发<MQTT旧版OneNET示例>的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/528923

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五