国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

九、W5100S/W5500+RP2040之MicroPython開發(fā)<HTTP&OneNET示例>

這篇具有很好參考價(jià)值的文章主要介紹了九、W5100S/W5500+RP2040之MicroPython開發(fā)<HTTP&OneNET示例>。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 前言

??在這個(gè)智能硬件和物聯(lián)網(wǎng)時(shí)代,MicroPython和樹莓派PICO正以其獨(dú)特的優(yōu)勢引領(lǐng)著嵌入式開發(fā)的新潮流。MicroPython作為一種精簡優(yōu)化的Python 3語言,為微控制器和嵌入式設(shè)備提供了高效開發(fā)和簡易調(diào)試的

??當(dāng)我們結(jié)合WIZnet W5100S/W5500網(wǎng)絡(luò)模塊,MicroPython和樹莓派PICO的開發(fā)潛力被進(jìn)一步放大。這兩款模塊都內(nèi)置了TCP/IP協(xié)議棧,使得在嵌入式設(shè)備上實(shí)現(xiàn)網(wǎng)絡(luò)連接變得更加容易。無論是進(jìn)行數(shù)據(jù)傳輸、遠(yuǎn)程控制,還是構(gòu)建物聯(lián)網(wǎng)應(yīng)用,它們都提供了強(qiáng)大的支持。

??本章我們將以WIZnet W5100S為例,以MicroPython的開發(fā)方式,連接至OneNET的HTTP服務(wù)器上,并定時(shí)通過POST上傳DHT11溫濕度傳感器采集的溫濕度信息,再通過GET獲取溫濕度信息。

2. 平臺(tái)操作流程

2.1 創(chuàng)建設(shè)備

??首先進(jìn)入開發(fā)者中心,在多協(xié)議接入的HTTP界面下創(chuàng)建好產(chǎn)品以及設(shè)備,然后添加apikey。

注意:如果您登錄之后并沒有多協(xié)議接入這個(gè)選項(xiàng),則需先進(jìn)行實(shí)名認(rèn)證。

micropython http onenet,W5100S/W5500+RP2040之Python開發(fā),RP2040,W5100S/W5500,MicroPython

2.2 創(chuàng)建數(shù)據(jù)流模板

在數(shù)據(jù)流模板界面創(chuàng)建溫度和濕度的數(shù)據(jù)流模板。

micropython http onenet,W5100S/W5500+RP2040之Python開發(fā),RP2040,W5100S/W5500,MicroPython

3. WIZnet以太網(wǎng)芯片

WIZnet 主流硬件協(xié)議棧以太網(wǎng)芯片參數(shù)對(duì)比

Model Embedded Core Host I/F TX/RX Buffer HW Socket Network Performance
W5100S TCP/IPv4, MAC & PHY 8bit BUS, SPI 16KB 4 Max 25Mbps
W6100 TCP/IPv4/IPv6, MAC & PHY 8bit BUS, Fast SPI 32KB 8 Max 25Mbps
W5500 TCP/IPv4, MAC & PHY Fast SPI 32KB 8 Max 15Mbps
  • W5100S/W6100 支持 8bit數(shù)據(jù)總線接口,網(wǎng)絡(luò)傳輸速度會(huì)優(yōu)于W5500。
  • W6100 支持IPV6,與W5100S 硬件兼容,若已使用W5100S的用戶需要支持IPv6,可以Pin to Pin兼容。
  • W5500 擁有比 W5100S更多的 Socket數(shù)量以及發(fā)送與接收緩存

相較于軟件協(xié)議棧,WIZnet的硬件協(xié)議棧以太網(wǎng)芯片有以下優(yōu)點(diǎn)

  1. 硬件TCP/IP協(xié)議棧:WIZnet的硬件協(xié)議棧芯片提供了一種硬件實(shí)現(xiàn)的TCP/IP協(xié)議棧,這種硬件實(shí)現(xiàn)的協(xié)議棧比軟件實(shí)現(xiàn)的協(xié)議棧具有更好的性能和穩(wěn)定性。
  2. 不需要額外的嵌入式系統(tǒng)軟件棧和內(nèi)存資源:由于所有的以太網(wǎng)傳輸和接收操作都由獨(dú)立的以太網(wǎng)控制器處理,因此不需要額外的嵌入式系統(tǒng)軟件棧和內(nèi)存資源。
  3. 抵抗網(wǎng)絡(luò)環(huán)境變化和DDoS攻擊:與易受網(wǎng)絡(luò)環(huán)境變化和DDoS攻擊影響的軟件TCP/IP協(xié)議棧相比,硬件協(xié)議棧芯片能夠提供更穩(wěn)定的以太網(wǎng)性能。
  4. 適用于低規(guī)格的嵌入式系統(tǒng):即使在低規(guī)格的嵌入式系統(tǒng)中,使用WIZnet的硬件協(xié)議棧芯片也可以比使用軟件TCP/IP協(xié)議棧的高規(guī)格系統(tǒng)顯示出更高效的互聯(lián)網(wǎng)應(yīng)用操作性能。

micropython http onenet,W5100S/W5500+RP2040之Python開發(fā),RP2040,W5100S/W5500,MicroPython

4. 示例講解以及使用

4.1 程序流程圖

micropython http onenet,W5100S/W5500+RP2040之Python開發(fā),RP2040,W5100S/W5500,MicroPython

4.2 測試準(zhǔn)備

軟件:

  • Thonny
  • OneNET平臺(tái)

硬件:

  • W5100S IO模塊 + RP2040 樹莓派Pico開發(fā)板 或者 WIZnet W5100S-EVB-Pico開發(fā)板
  • DHT11溫濕度傳感器
  • Micro USB 接口的數(shù)據(jù)線
  • 網(wǎng)線

4.3 連接方式

  • 通過數(shù)據(jù)線連接PC的USB口
  • 當(dāng)使用W5100S/W5500 IO模塊連接RP2040時(shí)
    • 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
  • 通過網(wǎng)線直接連接PC網(wǎng)口(或:PC和設(shè)備都通過網(wǎng)線連接交換機(jī)或路由器LAN口)

4.4 相關(guān)代碼

??我們直接打開http_client.onenet.py文件。

第一步:可以看到在w5x00_init()函數(shù)中,進(jìn)行了SPI的初始化。以及將spi相關(guān)引腳和復(fù)位引腳注冊(cè)到庫中,后續(xù)則是激活網(wǎng)絡(luò),并使用DHCP配置網(wǎng)絡(luò)地址信息,當(dāng)DHCP失敗時(shí),則配置靜態(tài)網(wǎng)絡(luò)地址信息。當(dāng)未配置成功時(shí),會(huì)打印出網(wǎng)絡(luò)地址相關(guān)寄存器的信息,可以幫助我們更好的排查問題。

第二步:打開定時(shí)器,例程設(shè)定是5秒觸發(fā)一次。

第三步:觸發(fā)定時(shí)器之后,會(huì)進(jìn)入到request()函數(shù),在這個(gè)函數(shù)中,首先會(huì)進(jìn)行校準(zhǔn)傳感器,然后先通過POST的方式把溫濕度信息上傳到平臺(tái)上,再通過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 = "fh=hneBwiD6m4o4X==1u=Q6HXp8="


#DHT11 definitions
pin = Pin(2,Pin.OUT)
sensor = dht.DHT11(pin)

"""
W5x00 chip initialization.
 
param: None
returns: None

"""
def w5x00_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)
    
    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())

"""
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 = None
    r = 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_count
    timer_1s_count += 1
    if timer_1s_count >= message_interval:
           timer_1s_count = 0
           request()
           
def main():
    print("WIZnet chip HTTP Client of OneNET example")
    w5x00_init()
    tim.init(freq=1, callback=tick)
    while True:
        time.sleep(1)

if __name__ == "__main__":
    main()

其中還需要用到urequests.py庫,代碼如下:

import usocket

class Response:

    def __init__(self, f):
        self.raw = f
        self.encoding = "utf-8"
        self._cached = None

    def close(self):
        if self.raw:
            self.raw.close()
            self.raw = None
        self._cached = None

    @property
    def content(self):
        if self._cached is None:
            try:
                self._cached = self.raw.recv(4096)
            finally:
                self.raw.close()
                self.raw = None
        return self._cached

    @property
    def text(self):
        return str(self.content, self.encoding)

    def json(self):
        import ujson
        return ujson.loads(self.content)


def request(method, url, data=None, json=None, headers={}, stream=None):
    try:
        proto, dummy, host, path = url.split("/", 3)
    except ValueError:
        proto, dummy, host = url.split("/", 2)
        path = ""
    if proto == "http:":
        port = 80
    elif proto == "https:":
        import ussl
        port = 443
    else:
        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_hostname=host)
        s.write(b"%s /%s HTTP/1.0\r\n" % (method, path))
        if not "Host" in headers:
            s.write(b"Host: %s\r\n" % host)
        # Iterate over keys to avoid tuple alloc
        for 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 None
            import ujson
            data = ujson.dumps(json)
            s.write(b"Content-Type: application/json\r\n")
        if data:
            s.write(b"Content-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(b"Transfer-Encoding:"):
                if b"chunked" in l:
                    raise ValueError("Unsupported " + l)
            elif l.startswith(b"Location:") and not 200 <= status <= 299:
                raise NotImplementedError("Redirects not yet supported")
    except OSError:
        s.close()
        raise

    resp = Response(s)
    resp.status_code = status
    resp.reason = reason
    return resp


def 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 燒錄驗(yàn)證

要測試以太網(wǎng)示例,必須將開發(fā)環(huán)境配置為使用Raspberry Pi Pico。

  • 所需的開發(fā)環(huán)境
    • Thonny
  • 如果你必須編譯MicroPython,則必須使用Linux或Unix環(huán)境。

第一步:將程序復(fù)制到Thonny中,然后選擇環(huán)境為Raspberry Pi Pico

第二步:將urequests.py這個(gè)庫文件保存到樹莓派Pico開發(fā)板中

micropython http onenet,W5100S/W5500+RP2040之Python開發(fā),RP2040,W5100S/W5500,MicroPython

第二步:運(yùn)行http_client_onenet.py程序,可以在OneNET平臺(tái)上看到上報(bào)的傳感器信息。

注意:因?yàn)镸icroPython的print函數(shù)是啟用了stdout緩沖的,所以有時(shí)候并不會(huì)第一時(shí)間打印出內(nèi)容。

micropython http onenet,W5100S/W5500+RP2040之Python開發(fā),RP2040,W5100S/W5500,MicroPython

5. 注意事項(xiàng)

  • 如果采用的是WIZnet的W5500來實(shí)現(xiàn)本章的示例,則只需燒錄W5500的固件并運(yùn)行示例程序即可。

6. 相關(guān)鏈接

WIZnet官網(wǎng)

本章例程鏈接

想了解更多,評(píng)論留言哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-774425.html

到了這里,關(guān)于九、W5100S/W5500+RP2040之MicroPython開發(fā)<HTTP&OneNET示例>的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 七、W5100S/W5500+RP2040樹莓派Pico<UDP 組播>

    七、W5100S/W5500+RP2040樹莓派Pico<UDP 組播>

    ??UDP組播是一種基于UDP協(xié)議的通信方式,它允許一臺(tái)計(jì)算機(jī)通過發(fā)送單個(gè)UDP數(shù)據(jù)包來同時(shí)向多個(gè)目標(biāo)發(fā)送信息。這種通信方式在需要高效、實(shí)時(shí)的數(shù)據(jù)傳輸?shù)膽?yīng)用中非常有用,比如視頻直播、在線游戲等。 ??本章節(jié)將進(jìn)行UDP組播回環(huán)測試。 ??W5100S/W5500是一款集成全硬

    2024年02月06日
    瀏覽(17)
  • 六、W5100S/W5500+RP2040樹莓派Pico<UDP Server數(shù)據(jù)回環(huán)測試>

    六、W5100S/W5500+RP2040樹莓派Pico<UDP Server數(shù)據(jù)回環(huán)測試>

    ??UDP是一種無連接的網(wǎng)絡(luò)協(xié)議,它提供了一種簡單的、不可靠的方式來進(jìn)行數(shù)據(jù)傳輸。盡管它并不保證數(shù)據(jù)傳輸?shù)耐暾院晚樞蛐?,但UDP在某些場景下卻具有獨(dú)特的優(yōu)勢,例如在實(shí)時(shí)應(yīng)用或網(wǎng)絡(luò)游戲等領(lǐng)域中。 ??W5100S/W5500是一款集成全硬件 TCP/IP 協(xié)議棧的嵌入式以太網(wǎng)控

    2024年02月07日
    瀏覽(18)
  • 三、W5100S/W5500+RP2040樹莓派Pico<TCP Client數(shù)據(jù)回環(huán)測試>

    三、W5100S/W5500+RP2040樹莓派Pico<TCP Client數(shù)據(jù)回環(huán)測試>

    ??在當(dāng)今的計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境中,TCP(傳輸控制協(xié)議)是一種非常重要的通信協(xié)議。TCP提供了一種可靠、有序和錯(cuò)誤控制的數(shù)據(jù)傳輸方式,被廣泛應(yīng)用于各種網(wǎng)絡(luò)應(yīng)用中。在TCP通信中,TCP Client是客戶端的角色,它負(fù)責(zé)建立連接、發(fā)送數(shù)據(jù)和接收數(shù)據(jù)。 ??本文以TCP Client為核

    2024年02月08日
    瀏覽(18)
  • Ubuntu搭建RP2040開發(fā)環(huán)境-1

    2024-4-23 hongxi.zhu 前置依賴(可選) 一、下載SDK和編譯鏈 下載SDK 下載交叉編譯鏈 配置 在最后追加 二、編譯實(shí)例工程 新開一個(gè)終端,進(jìn)入 pico-examples 目錄 編譯blink編程 編譯完成同級(jí)目錄下生成:blink.uf2、blink.elf、blink.bin 格式 下載方式 .uf2 USB拖拽到flash中 .elf SWD下載 .bin fla

    2024年04月26日
    瀏覽(27)
  • [micropython k210] 基于 Socket 實(shí)現(xiàn) MicroPython 的 HTTP 上傳文件(multipart/form-data)

    [micropython k210] 基于 Socket 實(shí)現(xiàn) MicroPython 的 HTTP 上傳文件(multipart/form-data)

    下述內(nèi)容需要具備 HTTP 的基礎(chǔ)知識(shí),如果不知道的可以過一遍 HTTP 協(xié)議詳解 繼上次在 K210 實(shí)現(xiàn) HTTP Download 文件(https 也支持辣),現(xiàn)在就來說說直接基于 socket 的上傳文件實(shí)現(xiàn)吧。 首先準(zhǔn)備一個(gè) Server 文件服務(wù)器的 CPython 代碼,這個(gè)是再簡單不過了。 可以看到實(shí)現(xiàn)處理了一個(gè)

    2024年02月08日
    瀏覽(28)
  • 樹莓派Raspberry Pico RP2040 開發(fā)環(huán)境配置完全縫合終極版C-SDK

    更新:這篇文章寫的有點(diǎn)亂,后續(xù)整理見我的個(gè)人博客:rp2040開發(fā)環(huán)境配置集合版 如果你只想要使用VScode作為你的開發(fā)環(huán)境,那么這篇會(huì)是更好的參考: RP2040配置VSCODE開發(fā)環(huán)境——一勞永逸版 RP2040作為一款樹莓派的單片機(jī),一開始我以為會(huì)有很成熟的開發(fā)方案,結(jié)果發(fā)現(xiàn)網(wǎng)

    2024年02月01日
    瀏覽(20)
  • MicroPython VSCode開發(fā)環(huán)境搭建

    MicroPython VSCode開發(fā)環(huán)境搭建

    本文中,使用的是 ESP32模塊的開發(fā)板,下面的例子都是以ESP32開發(fā)板作為例子進(jìn)行說明,如果你用的是其它的MicroPython開發(fā)板,只需要下載相應(yīng)的固件和工具進(jìn)行操作,大同小異。 操作系統(tǒng)使用的Windwos,如果你使用的Mac或者Linux,可能在下載或安裝一些工具的時(shí)候會(huì)有差別,

    2024年02月04日
    瀏覽(26)
  • 【雕爺學(xué)編程】MicroPython手冊(cè)之內(nèi)置模塊 urequests:發(fā)送 HTTP 請(qǐng)求和處理響應(yīng)

    【雕爺學(xué)編程】MicroPython手冊(cè)之內(nèi)置模塊 urequests:發(fā)送 HTTP 請(qǐng)求和處理響應(yīng)

    MicroPython是為了在嵌入式系統(tǒng)中運(yùn)行Python 3編程語言而設(shè)計(jì)的輕量級(jí)版本解釋器。與常規(guī)Python相比,MicroPython解釋器體積小(僅100KB左右),通過編譯成二進(jìn)制Executable文件運(yùn)行,執(zhí)行效率較高。它使用了輕量級(jí)的垃圾回收機(jī)制并移除了大部分Python標(biāo)準(zhǔn)庫,以適應(yīng)資源限制的微控制

    2024年01月17日
    瀏覽(21)
  • MicroPython開發(fā)esp32入門筆記--串口篇

    MicroPython開發(fā)esp32入門筆記--串口篇

    串行接口簡稱串口,也稱串行通信接口或串行通訊接口(通常指COM接口),是采用串行通信方式的擴(kuò)展接口。串行接口 (Serial Interface)是指數(shù)據(jù)一位一位地順序傳送。其特點(diǎn)是通信線路簡單,只要一對(duì)傳輸線就可以實(shí)現(xiàn)雙向通信(可以直接利用電話線作為傳輸線),從而大

    2024年02月05日
    瀏覽(26)
  • MicroPython開發(fā)ESP32入門筆記 -- 藍(lán)牙篇

    MicroPython開發(fā)ESP32入門筆記 -- 藍(lán)牙篇

    博主之前學(xué)習(xí)了用C語言去開發(fā)了51單片機(jī),雖然沒有將各種外設(shè)和傳感器都玩遍,但博主基本將一些重要的外設(shè)和傳感器通過原理學(xué)習(xí)加小項(xiàng)目實(shí)驗(yàn)的方式比較深入地玩了一下。眾所周知,51單片機(jī)是相對(duì)底層的,用來開發(fā)一些大項(xiàng)目的效率會(huì)比較低,所以我們很有必要學(xué)習(xí)

    2023年04月19日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包