王雪
(遼寧軌道交通職業學院,遼寧沈陽,110000)
人工智能的時代,Python 作為一種腳本語言和解釋性語言,因其超高的開發效率、海量的開源模塊、簡潔有效的語法格式,受到了廣泛的使用,受到全球程序員的歡迎。在服務器設計、數據統計、人工智能等各個方面都得到了發展。不僅如此,Python 作為一門膠水語言,還可以輕松的實現與C,C++等語言的調用,可謂無所不能。
另一方面,在嵌入式開發領域,由于涉及到芯片和硬件結構的限制,不同的硬件平臺所具備的資源各不相同,通過Python 語言同能在通用計算機當中運行,在專屬計算機領域并不能發揮其優勢。所幸的是,MicroPython 的出現,使問題得到了有效解決,使嵌入式的開發迎來了一個新的時代。
MicroPython 是Python 的一個精簡版本,它是為了運行在單片機這樣的性能有限的微控制器上,最小體積僅256K,運行時僅需16K 內存。MicroPython 是基于Python 3.4 的語法標準。因為要適應嵌入式微控制器,所以裁剪了大部分標準庫,僅保留部分模塊如math、sys 的部分函數和類。此外,很多標準模塊如json、re 等在MicroPython 中變成了以u 開頭的ujson、ure,表示針對MicroPython 開發的標準庫。目前,MicroPython 除了可以運行在最初開發的pyboard 微控制器上外,還可以運行在大量基于ARM 的嵌入式系統,如Arduino,這樣就可以通過Python 來非常方便地開發自動控制、機器人這樣的應用。
提到嵌入式系統的WIFI 連接,就不得不提到ESP32,ESP32 就是為 WIFI 無線連接而生的(如圖1 所示)。

圖1 ESP32 模塊
ESP32 芯片有5 種模式:
(1)活動模式:在這種模式下,Wi-Fi 和藍牙發射器和接收器的所有部分都是活動的。在這種情況下,電流消耗在80 和260mA 之間。
(2)調制解調器睡眠模式:處理器仍處于活動狀態,但Wi-Fi 和藍牙已禁用。在這種情況下,電流消耗在3 到20mA之間。
(3)輕度睡眠模式:主處理器停止工作,但RTC 單元和ULP 處理器單元仍處于活動狀態。電流消耗約為0.8 mA。
(4)深度睡眠模式:只有RTC 單元處于活動狀態。在這種情況下,Wi-Fi 和藍牙通信的數據存儲在RTC 的存儲器中。在此模式下,電流消耗在10 到150μA 之間。
(5)休眠模式:除了用于時鐘的RTC 定時器和連接到RTC的一些I / O 引腳外,所有單元均被禁用。 RTC 定時器或連接的引腳可以將芯片從此狀態喚醒。在這種情況下,電流消耗約為2.5μA
MicroPython 已經集成了 network 模塊,開發者使用內置的 network 模塊函數可以非常方便地連接上路由器。但往往也有各種連接失敗的情況,如密碼不正確等。這時候我們只需要再加上一些簡單的判斷機制,避免陷入連接失敗的死循環即可。Network 模塊函數如表1 所示。

表1 network 模塊
從上表可以看到 MicroPython 通過模塊封裝,讓WIFI 聯網變得非常簡單。模塊包含熱點AP 模塊和客戶端STA 模式,熱點AP 是指電腦端直接連接 ESP32 發出的熱點實現連接,但這樣電腦就不能上網了,因此我們一般情況下都是使用STA 模式。也就是電腦和設備同時連接到相同網段的路由器上。核心代碼如下:

套接字(Socket)是通信的基石,是支持 TCP/IP 協議的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種信息:
(1)連接使用的協議(通常是TCP 或 UDP)
(2)本地主機的IP 地址
(3)本地進程的協議端口
(4)遠地主機的IP 地址
(5)遠地進程的協議端口
socket 的出現只是可以更方便的使用 TCP/IP 協議棧形成了幾個最基本的函數接口。比如 create,listen, accept,connect,read 和 write 等等。通訊流程如圖2 所示。

圖2 Socket 通信流程
MicroPython 已經封裝好相關模塊usocket,跟傳統的socket 大部分兼容,兩者均可使用,其接口函數如表2 所示。

表2 usocket 模塊
核心代碼如下:


在電腦端打開網絡調試助手,創建一個新的連接,在左上角協議類型選擇 TCP Server;中間的本地 IP 地址是自動識別的,不要修改,這個就是服務器的IP 地址。然后端口寫 10000(0-65535 都可以。),點擊連接,成功后紅點亮。如圖3所示。

圖3 串口助手設置
此時服務器已經在監聽狀態,需要根據自己的實際情況自己輸入WIFI 信息和服務器 IP 地址+端口。即修改上面的代碼以下部分內容。(服務器 IP 和端口可以在網絡調試助手找到。)
wlan.connect(‘LGZY’,‘88888888’)#輸入WIFI 賬號密碼
addr=(‘192.168.1.115’,10000) #服務器 IP 和端口
下載程序,開發板成功連接WIFI 后,發起了socket 連接,連接成功可以可以看到網絡調試助手收到了開發板發來的信息。在下方列表多了一個連接對象,點擊選中,如圖4所示。

圖4 選中連接對象
選中后我們在發送框輸入信息“Hi”,點擊發送,可以看到開發板的 REPL 打印出來信息 Hi。為字節數據。另外由于程序將收到的信息發回給服務器,所以在網絡調試助手中也接收到開發板返回的信息:I got:Hi。
通過ESP32 和MicroPython。我們可以方便快捷的從嵌入式平臺上建立WIFI 網絡連接,從而實現物聯網各方面的應用。是目前性價比較高,技術較為成熟,實現起來最方便的方法之一。