ESP32C3支持Wifi功能,可以连接互联网,从网上获取信息,比如网络时间信息。
连接网络
参考官方提供的代码,填入自己的wifi名称和密码,即可实现联网。
import network
import urequests
import utime as time
wifi_ssid = "user_wifi"
wifi_password = "user_passwd"
def scan_and_connect():
station = network.WLAN(network.STA_IF)
station.active(True)
print("Scanning for WiFi networks, please wait...")
for ssid, bssid, channel, RSSI, authmode, hidden in station.scan():
print("* {:s}".format(ssid))
print(" - Channel: {}".format(channel))
print(" - RSSI: {}".format(RSSI))
print(" - BSSID: {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}".format(*bssid))
print()
while not station.isconnected():
print("Connecting...")
station.connect(wifi_ssid, wifi_password)
time.sleep(10)
print("Connected!")
print("My IP Address:", station.ifconfig()[0])
scan_and_connect()
串口输出的结果如下:
Scanning for WiFi networks, please wait...
.....
Connected!
My IP Address: 192.168.170.168
获取网络时间并显示
网络时间的获取是通过向网络时间服务器发起请求,在返回的json字符串中提取相关的信息,配合之前实现的ssd1306显示功能,从而实现获取网络时间并显示的功能。
代码如下
from machine import Pin, SoftI2C
import ssd1306
from time import sleep
import time
import network
import urequests
import ujson
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
station = network.WLAN(network.STA_IF)
station.active(True)
wifi_ssid = "user_wifi"
wifi_password = "user_passwd"
url = "http://worldtimeapi.org/api/timezone/America/New_York"
print("Scanning for WiFi networks, please wait...")
authmodes = ['Open', 'WEP', 'WPA-PSK' 'WPA2-PSK4', 'WPA/WPA2-PSK']
for (ssid, bssid, channel, RSSI, authmode, hidden) in station.scan():
print("* {:s}".format(ssid))
print(" - Channel: {}".format(channel))
print(" - RSSI: {}".format(RSSI))
print(" - BSSID: {:02x}:{:02x}:{:02x}:{:02x}:{:02x}:{:02x}".format(*bssid))
print()
while not station.isconnected():
print("Connecting...")
station.connect(wifi_ssid, wifi_password)
time.sleep(10)
print("Connected!")
print("My IP Address:", station.ifconfig()[0])
while True:
response = urequests.get(url)
if response.status_code == 200:
data = ujson.loads(response.text)
ny_datetime = data["datetime"]
date_part, time_part = ny_datetime.split("T")
time_part = time_part[:8]
timezone = data["timezone"]
oled.fill(0)
oled.text("New York Date:", 0, 0)
oled.text(date_part, 0, 10)
oled.text("New York Time:", 0, 20)
oled.text(time_part, 0, 30)
oled.text("Timezone:", 0, 40)
oled.text(timezone, 0, 50)
oled.show()
else:
oled.text("Failed to get the time for New York!")
oled.show()
显示效果如图
总结
wifi功能给了开发者获取外部信息的方式,使嵌入式设备接入网络,实现贴近实际的应用。