Pico W 的 Wi-Fi 連線方式與其他具有 Wi-Fi 功能的晶片一樣(例如ESP8266 或 ESP32),因為語言用的都是 MicroPython,所以沒什麼差別。程式碼如下,這段程式碼會不斷的嘗試連線直到取得 IP 為止。
## Document
## https://docs.micropython.org/en/latest/library/network.WLAN.html
import network
import utime
SSID = 'your-ssid'
PASSWORD = 'your-password'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
while not (wlan.isconnected() or wlan.status() == network.STAT_GOT_IP):
print("Waiting to connect:")
utime.sleep(1)
print(wlan.ifconfig())
呼叫 Web API
網路連線後,最常使用的功能就是呼叫 Web API 來取得雲端資料或是將感測器資料傳出去,以取得資料為例,程式碼如下。
## Document
## https://mpython.readthedocs.io/en/master/library/mPython/urequests.html
import urequests
res = urequests.get(url='https://raw.githubusercontent.com/kirkchu/mongodb/main/demo.json')
print(res.text)
如果成功,應該可以看到下面這個 JSON 內容。
[
{
"name": "David",
"age": 30
},
{
"name": "Betty",
"age": 27
}
]
JSON 解析
如果取得的資料是 JSON 格式,JSON 解析就會是接下來要做的事情。由於 urequest.get() 傳回的物件已經內建 JSON 解析器,所以直接呼叫 json() 就可以了,並不需要透過 ujson 函數庫來解析,程式碼如下。
import urequests
url = 'https://raw.githubusercontent.com/kirkchu/mongodb/main/demo.json'
res = urequests.get(url=url)
for p in res.json():
print(f'姓名:{p["name"]},年齡:{p["age"]}')
res.close() # do not forget
如果要自己手動解析也可以,這時就要匯入 ujson 函數庫了,如下。
## Document
## https://docs.micropython.org/en/v1.15/library/ujson.html
import urequests
import ujson
url = 'https://raw.githubusercontent.com/kirkchu/mongodb/main/demo.json'
res = urequests.get(url=url)
for p in ujson.loads(res.text):
print(f'姓名:{p["name"]},年齡:{p["age"]}')
res.close() # do not forget
上面這兩種方法不論是哪一種,都可以看到如下的結果,喜歡用哪一種都可以。
姓名:David,年齡:30
姓名:Betty,年齡:27
練習
設計一個 JSON 格式來控制 LED 亮滅,並且將這個 JSON 字串放到雲端,例如 GitHub。當修改 JSON 內容後,Pico 使用輪詢方式每隔一段時間訪問該 JSON 字串,然後根據內容來決定 LED 亮滅。
Library(mwifi.py)
import network
import time
class Wifi:
def __init__(self, ssid, password=None):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not (wlan.isconnected() or wlan.status() == network.STAT_GOT_IP):
print("Waiting to connect:")
time.sleep(1)
print(wlan.ifconfig())
if __name__ == '__main__':
Wifi('YOUR_SSID', 'YOUR_PASSWORD')
★本系列收錄於「第一次就上手」選單