第一部分 (3—5分钟短视频)
https://training.eeworld.com.cn/video/38622
第二部分 (任务总结报告)
任务1:使用MicroPython系统(必做任务)
熟悉Seeed Studio XIAO ESP32C3开发板基本操作,安装esptool,并给开发板刷写MicroPython系统,完成入门程序的运行
1、安装esptool工具,如果电脑里已经有了esptool的同学可以跳过
2、下载MicroPython固件,网址:
https://micropython.org/download/esp32c3/
将固件注入设备 最终结果
任务2:驱动扩展板上的OLED屏幕
任务目标:利用OLED屏幕显示文字图形图片等信息
因为OLED屏幕的驱动芯片是SSD1306,所以在网上找到ssd1306的micropython库即可
同时进行文字和图形的显示,以下为代码
from machine import Pin, SoftI2C
from ssd1306 import SSD1306_I2C
from font import Font
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
screen = SSD1306_I2C(128, 64, i2c)
f=Font(screen)
screen.fill_rect(0, 0, 128, 64, 1)
screen.fill_rect(2, 2, 124, 60, 0)
f.text("hello,world!",15,25,16)
screen.show()
运行结果
任务3:控制蜂鸣器播放音乐
任务目标:学会使用控制蜂鸣器,并能根据音乐简谱让蜂鸣器播放对应的音乐
扩展板上集成了一颗蜂鸣器,由于我们需要使用蜂鸣器发出不同频率的声音,所以这里就使用pwm功能来进行调整变频率
根据频率 查询音高 写出代码 代码如下
import machine
import utime
# 定义音调频率
tones = {'1': 277, '2': 294, '3': 330, '4': 349, '5': 392, '6': 440, '7': 494,'8':523,'9':587, '-': 0}
# 定义Bad apple!!!旋律
melody = "23456-986-2-654323456-543234321323456-986-2-654323456-543-4-5-6"
pizzo = machine.Pin(5)
pwm1 = machine.PWM(pizzo)
#frep1 = 500
#pwm1.freq(frep1)
#pwm1.duty_u16(32768)
for tone in melody:
freq = tones[tone]
if freq:
pwm1.init(duty=1000, freq=freq) # 调整PWM的频率,使其发出指定的音调
else:
pwm1.duty(0) # 空拍时一样不上电
# 停顿一下 (四四拍每秒两个音,每个音节中间稍微停顿一下)
utime.sleep_ms(400)
pwm1.duty(0) # 设备占空比为0,即不上电
utime.sleep_ms(100)
演示请看视频 这里不再放视频
任务4:连接WiFi网络
将Seeed Studio XIAO ESP32C3连接到WiFi网络,并访问互联网信息
esp32的一大优势就是联网 接下来我们只需要
使用network库来进行联网是真的好用
调用接口network.WLAN(network.STA_IF)设置network的模式
调用接口station.scan()来进行wifi热点扫描
调用接口station.connect(wifi_ssid, wifi_password)来连接到wifi网络
就可以愉快的调用网络上的内容啦
这边通过获取魅族天气数据 实现在开发板上显示天气
代码如下
import network
import urequests as requests
import ujson as json
import utime as time
# 无线连接设置
wifi_ssid = "MERCURY_8A1B"
wifi_password = "060324a0"
def scan_and_connect():
station = network.WLAN(network.STA_IF)
station.active(True)
if not station.isconnected():
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()
import ujson as json
import utime as time
import urequests
import network
from machine import Pin, SoftI2C
import ssd1306
# i2c引脚
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# 获取天津天气信息
response = urequests.get("https://aider.meizu.com/app/weather/listWeather?cityIds=101030100")
res = json.loads(response.text)
temp = res.get("value", [{}])[0].get("realtime", {}).get("temp")
sd = res.get("value", [{}])[0].get("realtime", {}).get("sD")
# 清除屏幕
oled.fill(0)
# 显示内容
oled.text("TianJin", 10, 15)
oled.text(temp+"C "+sd+"%", 10, 25)
oled.show()
任务5:使用外部传感器
连接环境光传感器或温湿度传感器,获取传感器的数值,并转换成真实的物理量
这一次follow me为我们选配了2个外部传感器模块,分别是温湿度传感器模块AHT20和环境光传感器模块。
这里演示温湿度传感器模块的示例
通过资料查询我们可知,这颗是数字传感器, 通过I2C协议传输数据. 使用的芯片是AHT20, 可以直接按照规格书的说明通过I2C协议通信. 由于使用广泛, 再某hub上已经有写好的库了, 这里直接调用ahtx0.py 即可.
代码如下
import ahtx0
from machine import Pin, SoftI2C
from ssd1306 import SSD1306_I2C
from font import Font
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
screen = SSD1306_I2C(128, 64, i2c)
sensor = ahtx0.AHT10(i2c)
f=Font(screen)
values = (sensor.temperature, sensor.relative_humidity)
f.text("T:%.2f"%(values[0]),36,25,16)
f.text("H:%.2f"%(values[1]),36,40,16)
screen.show()
sleep(2)