王雪
(遼寧軌道交通職業(yè)學院,遼寧沈陽,110000)
人工智能的時代,Python 作為一種腳本語言和解釋性語言,因其超高的開發(fā)效率、海量的開源模塊、簡潔有效的語法格式,受到了廣泛的使用,受到全球程序員的歡迎。在服務器設計、數(shù)據(jù)統(tǒng)計、人工智能等各個方面都得到了發(fā)展。不僅如此,Python 作為一門膠水語言,還可以輕松的實現(xiàn)與C,C++等語言的調用,可謂無所不能。
另一方面,在嵌入式開發(fā)領域,由于涉及到芯片和硬件結構的限制,不同的硬件平臺所具備的資源各不相同,通過Python 語言同能在通用計算機當中運行,在專屬計算機領域并不能發(fā)揮其優(yōu)勢。所幸的是,MicroPython 的出現(xiàn),使問題得到了有效解決,使嵌入式的開發(fā)迎來了一個新的時代。
MicroPython 是Python 的一個精簡版本,它是為了運行在單片機這樣的性能有限的微控制器上,最小體積僅256K,運行時僅需16K 內(nèi)存。MicroPython 是基于Python 3.4 的語法標準。因為要適應嵌入式微控制器,所以裁剪了大部分標準庫,僅保留部分模塊如math、sys 的部分函數(shù)和類。此外,很多標準模塊如json、re 等在MicroPython 中變成了以u 開頭的ujson、ure,表示針對MicroPython 開發(fā)的標準庫。目前,MicroPython 除了可以運行在最初開發(fā)的pyboard 微控制器上外,還可以運行在大量基于ARM 的嵌入式系統(tǒng),如Arduino,這樣就可以通過Python 來非常方便地開發(fā)自動控制、機器人這樣的應用。
提到嵌入式系統(tǒng)的WIFI 連接,就不得不提到ESP32,ESP32 就是為 WIFI 無線連接而生的(如圖1 所示)。
圖1 ESP32 模塊
ESP32 芯片有5 種模式:
(1)活動模式:在這種模式下,Wi-Fi 和藍牙發(fā)射器和接收器的所有部分都是活動的。在這種情況下,電流消耗在80 和260mA 之間。
(2)調制解調器睡眠模式:處理器仍處于活動狀態(tài),但Wi-Fi 和藍牙已禁用。在這種情況下,電流消耗在3 到20mA之間。
(3)輕度睡眠模式:主處理器停止工作,但RTC 單元和ULP 處理器單元仍處于活動狀態(tài)。電流消耗約為0.8 mA。
(4)深度睡眠模式:只有RTC 單元處于活動狀態(tài)。在這種情況下,Wi-Fi 和藍牙通信的數(shù)據(jù)存儲在RTC 的存儲器中。在此模式下,電流消耗在10 到150μA 之間。
(5)休眠模式:除了用于時鐘的RTC 定時器和連接到RTC的一些I / O 引腳外,所有單元均被禁用。 RTC 定時器或連接的引腳可以將芯片從此狀態(tài)喚醒。在這種情況下,電流消耗約為2.5μA
MicroPython 已經(jīng)集成了 network 模塊,開發(fā)者使用內(nèi)置的 network 模塊函數(shù)可以非常方便地連接上路由器。但往往也有各種連接失敗的情況,如密碼不正確等。這時候我們只需要再加上一些簡單的判斷機制,避免陷入連接失敗的死循環(huán)即可。Network 模塊函數(shù)如表1 所示。
表1 network 模塊
從上表可以看到 MicroPython 通過模塊封裝,讓WIFI 聯(lián)網(wǎng)變得非常簡單。模塊包含熱點AP 模塊和客戶端STA 模式,熱點AP 是指電腦端直接連接 ESP32 發(fā)出的熱點實現(xiàn)連接,但這樣電腦就不能上網(wǎng)了,因此我們一般情況下都是使用STA 模式。也就是電腦和設備同時連接到相同網(wǎng)段的路由器上。核心代碼如下:
套接字(Socket)是通信的基石,是支持 TCP/IP 協(xié)議的網(wǎng)絡通信的基本操作單元。它是網(wǎng)絡通信過程中端點的抽象表示,包含進行網(wǎng)絡通信必須的五種信息:
(1)連接使用的協(xié)議(通常是TCP 或 UDP)
(2)本地主機的IP 地址
(3)本地進程的協(xié)議端口
(4)遠地主機的IP 地址
(5)遠地進程的協(xié)議端口
socket 的出現(xiàn)只是可以更方便的使用 TCP/IP 協(xié)議棧形成了幾個最基本的函數(shù)接口。比如 create,listen, accept,connect,read 和 write 等等。通訊流程如圖2 所示。
圖2 Socket 通信流程
MicroPython 已經(jīng)封裝好相關模塊usocket,跟傳統(tǒng)的socket 大部分兼容,兩者均可使用,其接口函數(shù)如表2 所示。
表2 usocket 模塊
核心代碼如下:
在電腦端打開網(wǎng)絡調試助手,創(chuàng)建一個新的連接,在左上角協(xié)議類型選擇 TCP Server;中間的本地 IP 地址是自動識別的,不要修改,這個就是服務器的IP 地址。然后端口寫 10000(0-65535 都可以。),點擊連接,成功后紅點亮。如圖3所示。
圖3 串口助手設置
此時服務器已經(jīng)在監(jiān)聽狀態(tài),需要根據(jù)自己的實際情況自己輸入WIFI 信息和服務器 IP 地址+端口。即修改上面的代碼以下部分內(nèi)容。(服務器 IP 和端口可以在網(wǎng)絡調試助手找到。)
wlan.connect(‘LGZY’,‘88888888’)#輸入WIFI 賬號密碼
addr=(‘192.168.1.115’,10000) #服務器 IP 和端口
下載程序,開發(fā)板成功連接WIFI 后,發(fā)起了socket 連接,連接成功可以可以看到網(wǎng)絡調試助手收到了開發(fā)板發(fā)來的信息。在下方列表多了一個連接對象,點擊選中,如圖4所示。
圖4 選中連接對象
選中后我們在發(fā)送框輸入信息“Hi”,點擊發(fā)送,可以看到開發(fā)板的 REPL 打印出來信息 Hi。為字節(jié)數(shù)據(jù)。另外由于程序將收到的信息發(fā)回給服務器,所以在網(wǎng)絡調試助手中也接收到開發(fā)板返回的信息:I got:Hi。
通過ESP32 和MicroPython。我們可以方便快捷的從嵌入式平臺上建立WIFI 網(wǎng)絡連接,從而實現(xiàn)物聯(lián)網(wǎng)各方面的應用。是目前性價比較高,技術較為成熟,實現(xiàn)起來最方便的方法之一。