服装网站建设优点有哪些,电商网站多少钱,公众号创建好了怎么在微信里搜索,建设网站的技术手段文章目录 1. 前言2. 平台操作流程2.1 创建设备2.2 创建数据流模板 3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代#xff0c;MicroPython和树莓派PICO正… 文章目录 1. 前言2. 平台操作流程2.1 创建设备2.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的HTTP服务器上并定时通过POST上传DHT11温湿度传感器采集的温湿度信息再通过GET获取温湿度信息。
2. 平台操作流程
2.1 创建设备 首先进入开发者中心在多协议接入的HTTP界面下创建好产品以及设备然后添加apikey。 注意如果您登录之后并没有多协议接入这个选项则需先进行实名认证。 2.2 创建数据流模板
在数据流模板界面创建温度和湿度的数据流模板。 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 相关代码 我们直接打开http_client.onenet.py文件。
第一步可以看到在w5x00_init()函数中进行了SPI的初始化。以及将spi相关引脚和复位引脚注册到库中后续则是激活网络并使用DHCP配置网络地址信息当DHCP失败时则配置静态网络地址信息。当未配置成功时会打印出网络地址相关寄存器的信息可以帮助我们更好的排查问题。
第二步打开定时器例程设定是5秒触发一次。
第三步触发定时器之后会进入到request()函数在这个函数中首先会进行校准传感器然后先通过POST的方式把温湿度信息上传到平台上再通过GET的方式获取刚刚上传的温湿度信息再通过串口打印出来。 需注意要将程序中的apiaddress替换成您的HTTP api地址将apikey替换成您的HTTP APIKey from usocket import socket
from machine import Pin,SPI,Timer
import dht
import urequests
import network
import time#Timer-related definitions
message_interval 5
timer_1s_count 0
tim Timer()#HTTP of OneNET
apiaddress http://api.heclouds.com/devices/1168040732
apikey fhhneBwiD6m4o4X1uQ6HXp8#DHT11 definitions
pin Pin(2,Pin.OUT)
sensor dht.DHT11(pin)
W5x00 chip initialization.param: None
returns: None
def w5x00_init():spiSPI(0,2_000_000, mosiPin(19),misoPin(16),sckPin(18))nic network.WIZNET5K(spi,Pin(17),Pin(20)) #spi,cs,reset pinnic.active(True)try:#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())
POST submission data and GET request data.param: None
returns: None
def request():sensor.measure()r urequests.request(POST,apiaddress/datapoints,headers{api-key:apikey},json{datastreams:[{id:CurrentTemperature,datapoints:[{value:sensor.temperature()}]},{id:CurrentHumidity,datapoints:[{value:sensor.humidity()}]}]})if not r:print(spreadsheet: no response received)print(\r\npost response:,r.json())r Noner urequests.request(GET,apiaddress/datapoints,headers{api-key:apikey})if r.status_code 200:print(get request succ\r\n,r.text)else:print(get request error)
1-second timer callback function.param1: class timer
returns: None
def tick(timer):global timer_1s_counttimer_1s_count 1if timer_1s_count message_interval:timer_1s_count 0request()def main():print(WIZnet chip HTTP Client of OneNET example)w5x00_init()tim.init(freq1, callbacktick)while True:time.sleep(1)if __name__ __main__:main()其中还需要用到urequests.py库代码如下
import usocketclass Response:def __init__(self, f):self.raw fself.encoding utf-8self._cached Nonedef close(self):if self.raw:self.raw.close()self.raw Noneself._cached Nonepropertydef content(self):if self._cached is None:try:self._cached self.raw.recv(4096)finally:self.raw.close()self.raw Nonereturn self._cachedpropertydef text(self):return str(self.content, self.encoding)def json(self):import ujsonreturn ujson.loads(self.content)def request(method, url, dataNone, jsonNone, headers{}, streamNone):try:proto, dummy, host, path url.split(/, 3)except ValueError:proto, dummy, host url.split(/, 2)path if proto http::port 80elif proto https::import usslport 443else:raise ValueError(Unsupported protocol: proto)if : in host:host, port host.split(:, 1)port int(port)ai usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM)ai ai[0]s usocket.socket(ai[0], ai[1], ai[2])try:s.connect(ai[-1])if proto https::s ussl.wrap_socket(s, server_hostnamehost)s.write(b%s /%s HTTP/1.0\r\n % (method, path))if not Host in headers:s.write(bHost: %s\r\n % host)# Iterate over keys to avoid tuple allocfor k in headers:s.write(k)s.write(b: )s.write(headers[k])s.write(b\r\n)if json is not None:assert data is Noneimport ujsondata ujson.dumps(json)s.write(bContent-Type: application/json\r\n)if data:s.write(bContent-Length: %d\r\n % len(data))s.write(b\r\n)if data:s.write(data)l s.readline()#print(l)l l.split(None, 2)status int(l[1])reason if len(l) 2:reason l[2].rstrip()while True:l s.readline()if not l or l b\r\n:break#print(l)if l.startswith(bTransfer-Encoding:):if bchunked in l:raise ValueError(Unsupported l)elif l.startswith(bLocation:) and not 200 status 299:raise NotImplementedError(Redirects not yet supported)except OSError:s.close()raiseresp Response(s)resp.status_code statusresp.reason reasonreturn respdef head(url, **kw):return request(HEAD, url, **kw)def get(url, **kw):return request(GET, url, **kw)def post(url, **kw):return request(POST, url, **kw)def put(url, **kw):return request(PUT, url, **kw)def patch(url, **kw):return request(PATCH, url, **kw)def delete(url, **kw):return request(DELETE, url, **kw)
4.5 烧录验证 要测试以太网示例必须将开发环境配置为使用Raspberry Pi Pico。 所需的开发环境 Thonny 如果你必须编译MicroPython则必须使用Linux或Unix环境。
第一步将程序复制到Thonny中然后选择环境为Raspberry Pi Pico
第二步将urequests.py这个库文件保存到树莓派Pico开发板中 第二步运行http_client_onenet.py程序可以在OneNET平台上看到上报的传感器信息。 注意因为MicroPython的print函数是启用了stdout缓冲的所以有时候并不会第一时间打印出内容。 5. 注意事项
如果采用的是WIZnet的W5500来实现本章的示例则只需烧录W5500的固件并运行示例程序即可。
6. 相关链接
WIZnet官网
本章例程链接
想了解更多评论留言哦