核心板卡介绍:
特性
• 强大的 CPU:ESP32-C3,32 位 RISC-V 单核处理器,运行频率高达 160 MHz
• 完整的WiFi子系统:符合IEEE 802.11b/g/n协议,支持Station模式、SoftAP模式、SoftAP+Station模式、混杂模式
• 蓝牙 LE 子系统:支持蓝牙 5 和蓝牙网状网络的功能
• 超低功耗:深度睡眠功耗约43μA
• 更好的射频性能:可连接外部射频天线
• 电池充电芯片:支持锂电池充放电管理
• 丰富的片上资源:400KB SRAM、4MB板载闪存
• 超小尺寸:小至拇指 (20x17.5mm) XIAO 系列经典外形,适用于可穿戴设备和小型项目
• 可靠的安全功能:支持 AES-128/256、哈希、RSA、HMAC、数字签名和安全启动的加密硬件加速器
• 丰富的接口:1xI2C、1xSPI、2xUART、11xGPIO(PWM)、4xADC、1xJTAG
• 单面元件布局、支持表面贴装设计
官方维基:https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/
引脚图如下:
扩展板硬件资源:
https://wiki.seeedstudio.com/Seeeduino-XIAO-Expansion-Board/
任务1:使用MicroPython系统(必做任务)
电脑上的IDE使用的是THONNY。下面介绍如何给C3刷写最新的MICROPYTHON固件是:ESP32_GENERIC_C3-20231005-v1.21.0.bin
1. 去Micropython官网下载C3最新固件:https://micropython.org/download/ESP32_GENERIC_C3/
2. 检查电脑上Python的版本是否为3.4以上,因为接下来要用到pip安装刷新工具。
3. 安装esptool刷新工具
pip install esptool -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
确认串口号是否安装正确:
esptool.py --h
4. 开发板连接电脑,确认串口号
5.清空开发板FLASH
esptool.py --chip esp32c3 --port COM23 erase_flash
6.给C3刷入最新的固件
esptool.py --chip esp32c3 --port COM23 --baud 460800 write_flash -z 0x0 ESP32_GENERIC_C3-20231005-v1.21.0.bin
任务2:驱动扩展板上的OLED屏幕(必做任务)
1. 在THONNY IDE里面下载SSD1306的驱动
2. 添加相关的初始化代码
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C
i2c=I2C(0,sda=Pin(6), scl=Pin(7), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
oled.text("WELCOME!", 0, 0)
oled.text("This is EEWORLD", 0, 16)
oled.text("FOLLOW ME 3", 0, 32)
oled.text("JOIN US", 0, 48)
oled.show()
注意事项:
!
Before using it, it is required for me to state the software/firmware I'm using here is designed for the ESP32C3 chip. Hence when you are trying to use pin, make sure the General Purpose Input/Output instead of the pin on the board.
For example, when you are trying to use the pin in the first row on the left. Make sure it is GPIO2 instead of A0 or D0.
3. 实物效果:
任务3:控制蜂鸣器播放音乐(必做任务)
扩展板上A3引脚连接了一个无源蜂鸣器。
通过PWM的不同占空比和频率即可控制蜂鸣器发出不同的声音,甚至播放音乐!
# Buzzer settings
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
buzzer.freq(1047)
下面以比较简单的小星星乐谱为例来用C3扩展板上的蜂鸣器播放音乐。
下面是C调音符与频率对照关系:
# 定义音调频率
tones = {'1': 262, '2': 294, '3': 330, '4': 349, '5': 392, '6': 440, '7': 494, '-': 0}
# 定义小星星旋律
melody = "1155665-4433221-5544332-5544332-1155665-4433221"
while True:
# Play the song
for tone in melody:
freq = tones[tone]
if freq:
# 调整PWM的频率,使其发出指定的音调
buzzer.duty(1000) # Set duty cycle for sound
buzzer.freq(freq) # Set frequency of the note
else:
buzzer.duty(0) # 空拍时一样不上电
# 停顿一下 (四四拍每秒两个音,每个音节中间稍微停顿一下)
time.sleep_ms(400)
buzzer.duty(0) # 设备占空比为0,即不上电
time.sleep_ms(100)
实物展示:
任务4:连接WiFi网络(必做任务)
使用Micropython连接网络是比较简单的:
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])
连接成功后,控制台输出相应的IP地址:
* TP-LINK_2804
- Channel: 6
- RSSI: -92
- BSSID: 34:96:72:c2:28:04
* Hi32003Y7A1102300133002447F41513
- Channel: 6
- RSSI: -92
- BSSID: 08:31:8b:62:7f:41
Connected!
My IP Address: 192.168.0.104
接下来我会通过url访问心知天气并获取上海本地的天气信息。其中,心知天气返回的json格式的数据:
url = "https://api.seniverse.com/v3/weather/now.json?key=请替换自己的KEY&location=shanghai&language=zh-Hans&unit=c"
while True:
# Perform HTTP GET request on a non-SSL web
response = urequests.get(url)
# Check if the request was successful
if response.status_code == 200:
# Parse the JSON response
weather = ujson.loads(response.text)
print(weather)
# Extract the "datetime" field for New York
current_weather = weather["results"][0]["now"]
# Get the Temperature
current_temperature = current_weather["temperature"]
# Clear the OLED display
oled.fill(0)
# Display the New York date and time on separate lines
oled.text("Shanghai Temperature:", 0, 0)
oled.text(current_temperature, 0, 10)
# Update the display
oled.show()
else:
oled.text("Failed to get the weather")
# Update the display
oled.show()
time.sleep(30)
控制台的输出结果如下:
{'results': [{'location': {'name': '\u4e0a\u6d77', 'path': '\u4e0a\u6d77,\u4e0a\u6d77,\u4e2d\u56fd', 'timezone': 'Asia/Shanghai', 'timezone_offset': '+08:00', 'id': 'WTW3SJ5ZBJUY', 'country': 'CN'}, 'last_update': '2023-11-10T18:30:32+08:00', 'now': {'text': '\u591a\u4e91', 'code': '4', 'temperature': '14'}}]}
实物展示:
任务5:使用外部传感器(必做任务)
本次驱动温湿度传感器AHT20:
安装驱动:
核心代码:
from ahtx0 import AHT20
# Oled init
i2c=machine.I2C(0,sda=Pin(6), scl=Pin(7), freq=400000)
oled = SSD1306_I2C(128, 64, i2c)
oled.text("This is TASK5", 0, 0)
oled.text("aht20", 0, 16)
oled.text("Temp:", 0, 32)
oled.text("Humi:", 0, 48)
oled.show()
#aht20
aht = AHT20(i2c)
def ahtxx():
temp = aht.temperature
humi = aht.relative_humidity
print("\n")
print(temp)
print("\n")
print(humi)
#print("\n");
#print('{:.2f}'.format(humi))
oled.fill_rect(50,32,40,30,0) # 局部清屏
oled.text('{:.2f}'.format(temp), 50, 32)
oled.text('{:.2f}'.format(humi), 50, 48)
oled.show()
time.sleep(1)
实物展示:
实物展示:
任务6:分任务3:开灯提醒器
监测环境光强度,如果光线太暗,通过屏幕和蜂鸣器提醒用户开灯,达到保护视力的效果。本次任务使用到了
主要代码:
#led
led_red = machine.Pin(20, Pin.OUT)
led_red.off()
#adc
adc = machine.ADC(Pin(2))
adc.atten(machine.ADC.ATTN_11DB)
adc.width(machine.ADC.WIDTH_12BIT) #4095
# Buzzer settings
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
buzzer.freq(1047)
def lightSensor():
temp = adc.read()
print("\n")
print("lightsensor value: ")
print(temp)
lux_float = temp*350*1.0/4095;
oled.fill_rect(50,32,77,30,0) # 局部清屏
oled.text('{:.2f}'.format(lux_float), 50, 32)
if lux_float < 50:
oled.text("Too dark!", 50, 48)
buzzer.duty(512) # Turn off the sound
led_red.on()
else:
buzzer.duty(0) # Turn off the sound
led_red.off()
oled.show()
time.sleep(1)
实物展示:
总结:
非常开心能够参加这一期的FOLLOW ME活动,通过本次活动,我从micropython固件刷入esp32c3,到驱动OLED,联网,获取天气信息以及驱动aht20温湿度传感器,到最后做出来一个简易阅读提醒器。自己学习到了非常多的知识,也提升了自己的知识,希望follow me活动越办越好!
参考文档:
1. https://wiki.seeedstudio.com/XIAO_ESP32C3_Getting_Started/
2. https://wiki.seeedstudio.com/XIAO_ESP32C3_MicroPython/
本帖最后由 慕容雪花 于 2023-11-11 08:36 编辑太卷了吧,今天我才把针脚焊上
引用: lugl4313820 发表于 2023-11-11 10:14 ssd1306,你的库可以下载到吗,我是试了N次都不行。
来点魔法
引用: EPTmachine 发表于 2023-11-11 09:58 太卷了吧,今天我才把针脚焊上
我是昨天上午焊的,
引用: lugl4313820 发表于 2023-11-11 10:14 ssd1306,你的库可以下载到吗,我是试了N次都不行。
可以试试看更新Thonny到4.1.4版本或者直接拷贝个ssd1306.py文件丢进去