Raspberry Pi Pico W網路連線

Pico W最重要的功能之一就是可以連上網路,而它的連線方法和一般ESP8266以及ESP32相同,只要簡單的幾個步驟就可以了,也不需要安裝額外的模組或程式,使用上非常方便,是MicroPython的內建功能。這一篇教學文章就讓我們來看看如何讓Pico W連上網路,並取得目前網路上的時間。

首先,請先準備好你要使用的基地台的SSID和Password,然後利用以下的程式碼即可進行連線,並印出連線之後所取得的IP位址:

import network

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
    pass
print(wlan.ifconfig()[0])

其中,ssid以及password請填入你自己的內容,才能夠順利執行,在此例中,輸出的結果會是一個IP Address,如果一直沒有出現的話,那表示你提供的基地台SSID和密碼有問題喔。不同的基地台輸出的IP位址並不一定會一樣,所以如果讀者的IP和我的不一樣,那也是正常的。

192.168.50.103

有了IP之後,表示連線沒問題,接下來就可以進行許多和網路相關的操作,其中一個是網路校時功能,它的模組是ntptime,主要使用的是ntptime.settime(),然後把取得的時間再加上本地時差8小時,重新取得localtime()即可,程式碼如下:

import network
import time, ntptime

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
while not wlan.isconnected():
    pass
try:
    ntptime.settime()
except:
    pass
t = time.mktime(time.localtime())
t += 8*3600
y, m, d, h, M, s, _, _ = time.localtime(t)
print("{}-{}-{} {}:{}:{}".format(y, m, d, h, M, s))

上述程式之執行結果如下:

2022-12-27 17:45:53

結合前一篇文章的DHT11和SSD1306,我們現在已經可以製作出一個可以自行在微型顯示器上顯示偵測到的溫濕度以及顯示目前時間的物聯網裝置了。

import network
import time, ntptime
from machine import Pin, I2C
from dht import DHT11
import ssd1306


pin = Pin(22, Pin.OUT, Pin.PULL_UP)
sensor = DHT11(pin)
i2c = I2C(0, sda=Pin(16), scl=Pin(17))
disp = ssd1306.SSD1306_I2C(128, 64, i2c)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "password")
disp.fill(0)
disp.text("connecting...", 0, 0)
disp.show()
while not wlan.isconnected():
    pass
disp.fill(0)
disp.text("connected", 0, 0)
disp.show()
try:
    ntptime.settime()
except:
    pass
while True:
    temp = time.mktime(time.localtime())
    temp += 8*3600
    y, m, d, h, M, s, _, _ = time.localtime(temp)
    try:   
        sensor.measure()
        temperature  = (sensor.temperature)
        humidity = (sensor.humidity)
        disp.fill(0)
        disp.text('NKUST CCET', 0, 0)
        disp.text('Min-Huang Ho', 0, 10)
        disp.text('{}-{}-{}'.format(y, m, d), 0, 25)
        disp.text('{}:{}:{}'.format(h, M, s), 0, 40)
        disp.text('{}, {}%'.format(temperature, humidity), 0, 55)
    except:
        pass
    disp.show()
    time.sleep(1)

以下為上述程式的執行結果:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *