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

news2025/1/31 12:43:44

文章目录

  • 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'] = 0

message_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 init
    spi=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 pin
    nic.active(True)#network active
    
    
    try:
        #DHCP
        print("\r\nConfiguring DHCP")
        nic.ifconfig('dhcp')
    except:
        #None DHCP
        print("\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 information
    print("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 printed
    while 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_count
    global client
    timer_1s_count += 1
    if timer_1s_count >= message_interval:
        timer_1s_count = 0
        sensor.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 client
    print("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官网

本章例程链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux系统编程二十二】:(信号1)--信号的产生与发送

【Linux系统编程二十二】&#xff1a;信号的产生与发送 一.理解特性二.信号的产生1.键盘组合键①.前台进程②.硬件中断 2.异常的本质①软件异常 3.异步的 三.信号的发送 一.理解特性 第一&#xff0c;我们能够识别这个信号。我们能知道这个信号是什么。 第二&#xff0c;我们能…

2023亚马逊云科技re:Invent用Amazon Q打造你的知识库

随着ChatGPT的问世&#xff0c;我们迎来了许多创新和变革的机会。一年一度的亚马逊云科技大会re:Invent也带来了许多前言的技术&#xff0c;其中亚马逊云科技CEO Adam Selipsky在2023亚马逊云科技re:Invent大会中重磅推出Amazon Q&#xff0c;这预示着生成式AI的又一个里程碑。…

.net core 生成jwt+swagger-通过 IHttpContextAccessor读取token信息

1.安装jwt相关包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"6.0.25" /><PackageReference Include"Microsoft.IdentityModel.Tokens" Version"7.0.3" /><P…

离散型制造企业为什么要注重MES管理系统的实施

离散型制造企业经常面临三个核心问题&#xff1a;生产什么、生产多少以及如何生产。尽管许多企业都实施了ERP系统&#xff0c;但仍然绕不开MES管理系统的话题。本文将从三个方面详细解释为什么离散型企业需要实施MES管理系统。 一、生产线经常出现的问题 在离散型企业中&#…

5g消息-5G时代短信升级-富媒体智能交互-互联网新入口

在5G时代&#xff0c;运营商和各大手机厂商都在积极推进5G消息的商用&#xff0c;基于短信入口的富媒体消息应用在近两年得到快速发展&#xff0c;并在企业端形成了广泛应用。 作为5G时代的数字原生应用&#xff0c;5G消息支持用户通过文字、图片、音频、视频、位置等富媒体方式…

华为---登录USG6000V防火墙---console、web、telnet、ssh方式登录

目录 一、环境搭建 二、第一次登录USG6000V防火墙&#xff0c;即通过console方式登录 三、用户配置 四、web登录USG6000V防火墙 1. 用web创建的用户通过web方式登录USG6000V防火墙 2. 命令行创建的用户通过web方式登录USG6000V防火墙 五、ssh方式登录USG6000V防火墙 1. 用…

uniapp纯CSS实现圆形进度条组件

uniapp纯CSS实现圆形进度条组件。圆形进度条组件组合做一个步骤进度组件是非常常见。 纯 CSS 实现圆形进度条组件有以下几个好处&#xff1a; 轻量级&#xff1a;由于纯 CSS 实现&#xff0c;无需额外的 JavaScript 或图像资源&#xff0c;所以组件的文件大小相对较小&#xf…

再见卷积神经网络,使用 Transformers 创建计算机视觉模型

本文旨在介绍 / 更新 Transformers 背后的主要思想&#xff0c;并介绍在计算机视觉应用中使用这些模型的最新进展。 读完这篇文章&#xff0c;你会知道…… 为什么 Transformers 在 NLP 任务中的表现优于 SOTA 模型。Transformer 模型的工作原理这是卷积模型的主要限制。Tran…

Vue和React的运行时,校验引入包的上下文差异

背景 系统使用 webpack 5 模块联邦实现微前端&#xff0c;有关如何实现跨应用的代码共享&#xff0c;可参考 如何优雅的实现跨应用的代码共享 里的第三大点。 总之&#xff0c;这里是其他应用使用了某个应用共享出来的reg文件&#xff0c;引入方式为&#xff1a; import REG …

日志服务 SLS 深度解析:拥抱云原生和 AI,基于 SLS 的可观测分析创新

云布道师 10 月 31 日&#xff0c;杭州云栖大会上&#xff0c;日志服务 SLS 研发负责人简志和产品经理孟威等人发表了《日志服务 SLS 深度解析&#xff1a;拥抱云原生和 AI&#xff0c;基于 SLS 的可观测分析创新》的主题演讲&#xff0c;对阿里云日志服务 SLS 产品服务创新以…

PCL配置记录

PCL配置记录 1. Windows10vs2019pcl win10vs2019pcl 1.11.1 1.下载与安装 https://github.com/PointCloudLibrary/pcl/releases ) 双击exe安装 注意&#xff1a; ( ) 解压 “pcl-1.11.0-pdb-msvc2019-win64.zip”&#xff0c;将解压得到的文件夹中的内容添加“…\PCL…

momentum2靶机

文章妙语 遇事不决&#xff0c;可问春风&#xff1b; 春风不语&#xff0c;遵循己心。 文章目录 文章妙语前言一、信息收集1.IP地址扫描2.端口扫描3.目录扫描 二&#xff0c;漏洞发现分析代码bp爆破1.生成字典2.生成恶意shell.php2.抓包 三&#xff0c;漏洞利用1.反弹shell 四…

Vue基础知识一

一.Vue简介 1.1 Vue.js 是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既…

swing快速入门(二十四)绘画板-可调色

注释很详细&#xff0c;直接上代码 上一篇 Look here~ 听我说完再继续看更容易理解&#xff1a; 如果说用之前的绘图方法写一个绘画板你会怎么做&#xff1f;重绘会让之前的内容消失呀&#xff0c;用各种数据结构记录每个像素点的位置或颜色&#xff1f;嘶&#xff0c;感觉很麻…

电商数仓项目----笔记六(数仓ODS层)

ODS层的设计要点如下&#xff1a; &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步过来的数据结构。 &#xff08;2&#xff09;ODS层要保存全部历史数据&#xff0c;故其压缩格式应选择压缩比较高的&#xff0c;此处选择gzip。 &#xff08;3&#xff09;…

MySQL运维实战(1.2)安装部署:使用二进制安装部署

作者&#xff1a;俊达 引言 上一篇我们使用了RPM进行安装部署&#xff0c;这是一种安装快速、简化部署和管理过程、与操作系统提供的包管理工具紧密集成的部署方法。此外&#xff0c;当你需要更高的灵活性和自定义性&#xff0c;并且愿意承担一些额外的手动配置和管理工作&am…

【终极教程】Cocos2dx服务端重构(优化cocos2dx服务端)

文章目录 概述问题概述1. 代码混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤2. 缺乏文档3. 缺乏推荐的最佳实践4. 性能问题 总结 概述 Cocos2dx是一个非常流行的跨平台游戏引擎&#xff0c;开发者可以使用这个引擎来开发iOS、Android和Web游戏。同时&#xff0c;Coco…

华为gre隧道全部跑静态路由

最终实现&#xff1a; 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做&#xff0c;没有用ospf&#xff0c;如果要用ospf&#xff0c;那么两边除了路由器上跑ospf&#xff0c;核心交换机也得用ospf r2配置&#xff1a; acl number 3000 rule 5 deny…

【ARM Cortex-M 系列 5 -- RT-Thread renesas/ra4m2-eco 移植编译篇】

文章目录 RT-Thread 移植编译篇编译os.environ 使用示例os.putenv使用示例python from 后指定路径 编译问题_POSIX_C_SOURCE 介绍编译结果 RT-Thread 移植编译篇 本文以瑞萨的ra4m2-eco 为例介绍如何下载rt-thread 及编译的设置。 RT-Thread 代码下载&#xff1a; git clone …

Python并行计算和分布式任务全面指南

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python并行计算和分布式任务全面指南。全文2900字&#xff0c;阅读大约8分钟 并发编程是现代软件开发中不可或缺的一部分&#xff0c;它允许程序同时执行多个任务&#xff0…