1 前言
??隨著云計(jì)算的推廣和普及,越來越多的網(wǎng)絡(luò)設(shè)備和服務(wù)需要連接到網(wǎng)絡(luò),這意味著需要更多的IP地址和其他網(wǎng)絡(luò)配置信息。DHCP服務(wù)器可以動態(tài)地分配IP地址和其他配置信息,簡化了網(wǎng)絡(luò)配置管理,提高了網(wǎng)絡(luò)設(shè)備的可用性和效率。
??W5100S/W5500是一款集成全硬件 TCP/IP 協(xié)議棧的嵌入式以太網(wǎng)控制器,同時(shí)也是一顆工業(yè)級以太網(wǎng)控制芯片。本教程將介紹W5100S/W5500以太網(wǎng)HTTP Server應(yīng)用的基本原理、使用步驟、應(yīng)用實(shí)例以及注意事項(xiàng),幫助讀者更好地掌握這一技術(shù)。
2. 相關(guān)網(wǎng)絡(luò)信息
2.1 簡介
??HTTP,全稱為超文本傳輸協(xié)議(Hypertext Transfer Protocol),是一種應(yīng)用最為廣泛的網(wǎng)絡(luò)傳輸協(xié)議,是用于從萬維網(wǎng)服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議,所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。它是一個(gè)基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML文件,圖片文件,查詢結(jié)果等)。
2.2 HTTP Server工作步驟
HTTP Server的原理步驟可以歸納為以下幾點(diǎn):
- 建立連接:Web瀏覽器與Web服務(wù)器建立連接,打開一個(gè)稱為socket(套接字)的虛擬文件,此文件的建立標(biāo)志著連接建立成功。
- 請求:Web瀏覽器通過socket向Web服務(wù)器提交請求。HTTP的請求一般是GET或POST命令(POST用于FORM參數(shù)的傳遞)。
- 服務(wù)器處理請求:一旦收到請求,服務(wù)器會根據(jù)請求類型和URL找到相應(yīng)的資源,并讀取文件內(nèi)容。如果是POST請求,服務(wù)器還會解析表單數(shù)據(jù)。
- 響應(yīng):服務(wù)器將處理后的數(shù)據(jù)通過HTTP協(xié)議返回給客戶端,包括HTTP頭信息和HTML文件內(nèi)容。
- 關(guān)閉連接:客戶端和服務(wù)器之間的連接在完成數(shù)據(jù)交換后會被關(guān)閉。
2.3 HTTP Server的優(yōu)點(diǎn)
??HTTP Server的優(yōu)點(diǎn)包括:
- 簡單靈活:HTTP協(xié)議簡單,易于理解和實(shí)現(xiàn),因此開發(fā)人員可以更快地構(gòu)建和部署應(yīng)用程序。
- 易于擴(kuò)展:HTTP協(xié)議支持多種擴(kuò)展,可以輕松地添加新功能和特性,以滿足不斷變化的需求。
- 無狀態(tài):HTTP協(xié)議無狀態(tài),這意味著服務(wù)器不會為每個(gè)請求保持狀態(tài)。雖然這可能會導(dǎo)致一些問題,但無狀態(tài)也使得HTTP協(xié)議更加靈活和可擴(kuò)展。
- 支持跨平臺:HTTP協(xié)議是一種通用的網(wǎng)絡(luò)協(xié)議,可以在各種操作系統(tǒng)和設(shè)備上實(shí)現(xiàn)和使用。
- 支持多種編程語言:HTTP協(xié)議不限制使用的編程語言,因此可以使用各種編程語言來開發(fā)和部署應(yīng)用程序。
- 良好的可維護(hù)性:HTTP協(xié)議規(guī)范明確,易于理解和維護(hù),同時(shí)存在許多成熟的工具和庫,使得開發(fā)人員可以更快地構(gòu)建和部署應(yīng)用程序。
- 支持多媒體內(nèi)容:HTTP協(xié)議可以傳輸多種類型的數(shù)據(jù),包括文本、圖片、音頻和視頻等多媒體內(nèi)容,使得開發(fā)人員可以輕松地構(gòu)建多媒體應(yīng)用程序。
- 支持緩存和壓縮:HTTP協(xié)議支持緩存和壓縮技術(shù),可以減少網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,提高應(yīng)用程序的性能和響應(yīng)速度。
2.4 HTTP Server應(yīng)用場景
??HTTP Server的應(yīng)用場景非常廣泛,以下是一些主要的場景:
- 文件共享:HTTP Server最廣泛的用途就是允許在互聯(lián)網(wǎng)上共享文件。通過使用HTTP Server,用戶可以從服務(wù)器下載或上傳文件。
- Web應(yīng)用:大多數(shù)的網(wǎng)站和應(yīng)用都離不開HTTP Server。HTTP Server能夠處理客戶端的請求,并且把處理的結(jié)果返回到客戶端。
- 云服務(wù):許多云服務(wù)都依賴于HTTP Server,比如Amazon的S3、Google Cloud Storage等。這些服務(wù)都提供了一個(gè)RESTful的API,使用HTTP進(jìn)行交互。
- 大數(shù)據(jù):Hadoop、Spark等大數(shù)據(jù)工具都支持通過HTTP Server來訪問和處理數(shù)據(jù)。
- 物聯(lián)網(wǎng):在物聯(lián)網(wǎng)領(lǐng)域,HTTP Server也發(fā)揮了很大的作用。比如,許多智能家居設(shè)備都使用HTTP Server來與手機(jī)應(yīng)用或者網(wǎng)頁進(jìn)行交互。
- 流媒體:HTTP Server也被廣泛用于流媒體服務(wù),比如一些在線視頻網(wǎng)站和音樂網(wǎng)站。
- 游戲開發(fā):一些基于Web的游戲也使用了HTTP Server來進(jìn)行客戶端和服務(wù)器之間的通信。
- 遠(yuǎn)程管理:許多設(shè)備的遠(yuǎn)程管理界面就是一個(gè)簡單的Web頁面,通過HTTP Server接受用戶的輸入并返回結(jié)果。
3 WIZnet以太網(wǎng)芯片
WIZnet 主流硬件協(xié)議棧以太網(wǎng)芯片參數(shù)對比
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ò)傳輸速度會優(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):
- 硬件TCP/IP協(xié)議棧:WIZnet的硬件協(xié)議棧芯片提供了一種硬件實(shí)現(xiàn)的TCP/IP協(xié)議棧,這種硬件實(shí)現(xiàn)的協(xié)議棧比軟件實(shí)現(xiàn)的協(xié)議棧具有更好的性能和穩(wěn)定性。
- 不需要額外的嵌入式系統(tǒng)軟件棧和內(nèi)存資源:由于所有的以太網(wǎng)傳輸和接收操作都由獨(dú)立的以太網(wǎng)控制器處理,因此不需要額外的嵌入式系統(tǒng)軟件棧和內(nèi)存資源。
- 抵抗網(wǎng)絡(luò)環(huán)境變化和DDoS攻擊:與易受網(wǎng)絡(luò)環(huán)境變化和DDoS攻擊影響的軟件TCP/IP協(xié)議棧相比,硬件協(xié)議棧芯片能夠提供更穩(wěn)定的以太網(wǎng)性能。
- 適用于低規(guī)格的嵌入式系統(tǒng):即使在低規(guī)格的嵌入式系統(tǒng)中,使用WIZnet的硬件協(xié)議棧芯片也可以比使用軟件TCP/IP協(xié)議棧的高規(guī)格系統(tǒng)顯示出更高效的互聯(lián)網(wǎng)應(yīng)用操作性能。
4 HTTP網(wǎng)絡(luò)設(shè)置示例概述以及使用
4.1 流程圖
??程序的運(yùn)行框圖如下所示:
4.2 準(zhǔn)備工作核心
軟件
- Thonny
硬件
- W5100SIO模塊 + RP2040 樹莓派Pico開發(fā)板 或者 Wiznet W5100S-EVB-Pico開發(fā)板
- Micro USB 接口的數(shù)據(jù)線
- 網(wǎng)線
4.3 連接方式
- 通過數(shù)據(jù)線連接PC的USB口(主要用于燒錄程序,也可以虛擬出串口使用)
- 使用模塊連接RP2040 進(jìn)行接線時(shí)
- RP2040 GPIO16 <----> W5100S MISO
- RP2040 GPIO17 <----> W5100S CS
- RP2040 GPIO18 <----> W5100S SCK
- RP2040 GPIO19 <----> W5100S MOSI
- RP2040 GPIO20 <----> W5100S RST
- 通過PC和設(shè)備都通過網(wǎng)線連接路由器LAN口
4.4 主要代碼概述
??我們直接打開http_server.py文件。
第一步:可以看到在w5x00_init()函數(shù)中,進(jìn)行了SPI的初始化。以及將SPI相關(guān)引腳和復(fù)位引腳注冊到庫中,后續(xù)則是激活網(wǎng)絡(luò),并使用DHCP配置網(wǎng)絡(luò)地址信息,當(dāng)DHCP失敗時(shí),則配置靜態(tài)網(wǎng)絡(luò)地址信息。當(dāng)未配置成功時(shí),會打印出網(wǎng)絡(luò)地址相關(guān)寄存器的信息,可以幫助我們更好的排查問題。
第二步:設(shè)置socket號,綁定服務(wù)器ip和端口號。
第三步:監(jiān)聽,等待客戶端連接。
第四步:設(shè)置網(wǎng)頁界面,對客戶端的請求做出解析,以此來控制燈的開關(guān)。同時(shí)窗口打印出燈的狀態(tài)和客戶端的IP信息
''' HTTP Server example.
date: 2023-11-27
'''
from usocket import socket
from machine import Pin,SPI
import time, network
''' LED init
'''
led = Pin(25, Pin.OUT)
''' static netinfo
'''
ip = '192.168.1.11'
sn = '255.255.255.0'
gw = '192.168.1.1'
dns= '8.8.8.8'
netinfo=(ip, sn, gw, dns)
localip = ''
localport = 8000
listen_info = (localip, localport)
def w5x00_init():
global localip
''' spi0 init
baudrate: 2000000
mosi pin: gpio19
miso pin: gpio16
sck pin: gpio18
cs pin: gpio17
rst pin: gpio20
'''
spi=SPI(0,2_000_000, mosi=Pin(19),miso=Pin(16),sck=Pin(18))
nic = network.WIZNET5K(spi,Pin(17),Pin(20))
nic.active(True)
# use dhcp, if fail use static netinfo
try:
nic.ifconfig('dhcp')
except:
nic.ifconfig(netinfo)
localip = nic.ifconfig()[0]
print('ip :', nic.ifconfig()[0])
print('sn :', nic.ifconfig()[1])
print('gw :', nic.ifconfig()[2])
print('dns:', nic.ifconfig()[3])
while not nic.isconnected():
time.sleep(1)
# print(nic.regs())
print('no link')
uart.write('no link\r\n')
''' web page info
'''
def web_page():
if led.value()==1:
led_state="ON"
else:
led_state="OFF"
html = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Raspberry Pi Pico Web server - WIZnet W5100S</title>
</head>
<body>
<div align="center">
<H1>Raspberry Pi Pico Web server & WIZnet Ethernet HAT</H1>
<h2>Control LED</h2>
PICO LED state: <strong>""" + led_state + """</strong>
<p><a href="/?led=on"><button class="button">ON</button></a><br>
</p>
<p><a href="/?led=off"><button class="button button2">OFF</button></a><br>
</p>
</div>
</body>
</html>
"""
return html
def main():
global localip
w5x00_init()
s = socket()
s.bind((localip, 80))
s.listen(5)
while True:
conn, addr = s.accept()
print('Connect from %s' % str(addr))
request = conn.recv(1024)
request = str(request)
#print('Content = %s' % request)
led_on = request.find('/?led=on')
led_off = request.find('/?led=off')
if led_on == 6:
print("LED ON")
led.value(1)
if led_off == 6:
print("LED OFF")
led.value(0)
response = web_page()
conn.send('HTTP/1.1 200 OK\n')
conn.send('Connection: close\n')
conn.send('Content-Type: text/html\n')
conn.send('Content-Length: %s\n\n' % len(response))
conn.send(response)
conn.close()
if __name__ == "__main__":
main()
4.5 結(jié)果演示
第一步:打開thonny選擇環(huán)境為Raspberry Pi Pico將程序復(fù)制到Thonny中,然后點(diǎn)擊運(yùn)行。
第二步:打開瀏覽器輸入服務(wù)器ip,進(jìn)入到網(wǎng)頁。
第三步:選擇燈的狀態(tài)進(jìn)行控制。點(diǎn)擊瀏覽器界面控制燈的狀態(tài)之后Thonny上的窗口會打印燈的狀態(tài)和客戶端ip。
注意:因?yàn)镸icroPython的print函數(shù)是啟用了stdout緩沖的,所以有時(shí)候并不會第一時(shí)間打印出內(nèi)容。
5 注意事項(xiàng)
- 如果采用的是Wiznet的W5500來實(shí)現(xiàn)本章的示例,則只需燒錄W5500的固件并運(yùn)行示例程序即可。
6 相關(guān)鏈接
WIZnet官網(wǎng)
本章例程鏈接文章來源:http://www.zghlxwxcb.cn/news/detail-828670.html
想了解更多,評論留言哦!文章來源地址http://www.zghlxwxcb.cn/news/detail-828670.html
到了這里,關(guān)于八、W5100S/W5500+RP2040之MicroPython開發(fā)<HTTP Server示例>的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!