【得捷Follow me第3期】XIAO主板交作业
[复制链接]
大家好,我是郑工,又有幸参加得捷的follow me活动,有幸能拿到seeed studio XIAO开发板来跟大家做技术交流。
开发板靓照
首先还是来简单介绍一下开发板的硬件功能,下面是官方提供的资料,可以看到XIAO的功能还是非常强大的,而且更难得的是尺寸非常小,上面的照片可以看到,主板也就跟我一个usb线头差不多大,主要是面向小型设备的开发。
底板的资源也非常丰富,有两个IIC,一个UART,一个AD口外接,还带有RTC实时时钟芯片,SD卡,蜂鸣器,一个RST按键和一个用户按键。
那我就来简单说明一下任务细节。
视频:https://training.eeworld.com.cn/video/38829
代码:https://download.eeworld.com.cn/detail/eew_Ya3s2d/630305
任务1:使用MicroPython系统
首先需要下载三个东西:
开发环境:
固件下载工具:
MicroPython固件:MicroPython - Python for microcontrollers
然后在文件夹地址栏输入cmd打开命令行工具,输入以下指令(com口和文件名都是可以改变的,文件跟esptool放在同一个文件夹)
esptool.exe --chip esp32c3 --port COM10 --baud 921600 --before default_reset --after hard_reset --no-stub write_flash --flash_mode dio --flash_freq 80m 0x0 ESP32_GENERIC_C3-20231005-v1.21.0.bin
如果通过thonny上可以连接开发板就是下载成功
成功连接会有三个紫色">"符号
然后在工具>管理插件里搜索“SSD1306",并且安装,就完成开始的准备工作,可以开始玩转micropython
任务2:驱动扩展板上的OLED屏幕
这个任务就是使用SSD1306库控制OLED屏
首先要初始化OLED屏幕,并且加载GFX库
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
grap = GFX(oled_width, oled_height, oled.pixel)
然后使用oled库就是不断的使用oled.fill(0)写0清屏,然后写入需要的内容,再调用oled.show()显示内容
oled.fill(0) # Clear the screen
grap.circle(64,32,r,1) #圆心x,圆心y,半径,线宽
oled.text(f'r:{r}',0,0) #内容,显示x,显示y
oled.show()
任务3:控制蜂鸣器播放音乐
底板上自带蜂鸣器,播放音乐就是改变蜂鸣器的频率,我们先定义需要的音调
NOTE_G3 = 196
NOTE_A3 = 221
NOTE_B3 = 248
NOTE_C4 = 262
NOTE_D4 = 294
NOTE_E4 = 330
NOTE_F4 = 349
NOTE_G4 = 392
NOTE_A4 = 440
NOTE_B4 = 494
NOTE_C5 = 523
NOTE_D5 = 587
NOTE_E5 = 659
NOTE_F5 = 698
NOTE_G5 = 784
NOTE_A5 = 880
NOTE_B5 = 988
NOTE_C6 = 1047
NOTE_D6 = 1175
NOTE_E6 = 1319
NOTE_F6 = 1397
NOTE_G6 = 1568
NOTE_A6 = 1760
NOTE_B6 = 1967
然后音乐就是用不同的频率播放不同的长度,我写了一个子程序播放音乐
def play_song(tone,step):
total_notes = len(tone)
for i in range(total_notes):
current_note = tone[i]
wait = step[i]
if current_note != 0:
buzzer.duty(512) # Set duty cycle for sound
buzzer.freq(current_note) # Set frequency of the note
else:
buzzer.duty(0) # Turn off the sound
time.sleep_ms(wait)
buzzer.duty(0) # Turn off the sound
任务4:连接WiFi网络
ESP32最大的特点就是自带蓝牙与wifi功能,我们可以使用自带的network库连接上指定的wifi,只需要调用
station = network.WLAN(network.STA_IF)
station.active(True)
station.connect(wifi_ssid, wifi_password)
这几个都是固定格式了,wifi_ssid是WiFi名称,wifi_password是WiFi密码
后面我还是经典的连接获取网络时间
r = urequests.get("http://api.pinduoduo.com/api/server/_stm")
rtc_time = r.headers['Date'].split(' ')
#Sun, 17 Dec 2023 14:10:34 GMT
#['Sun,', '17', 'Dec', '2023', '14:10:34', 'GMT']
oled.fill(0)
show_text(f"{rtc_time[3]}-{rtc_time[2]}-{rtc_time[1]}",1);
show_text(f"{rtc_time[4]}",2);
#去掉最后一个逗号
show_text(f"{rtc_time[0][:-1]}",3);
oled.show()
r.close()
任务5:使用外部传感器
传感器我使用了follow me第二期买的SHT40还有一个光敏传感器。SHT40主要使用iic通讯,光敏就是使用adc读取模拟值,首先初始化一下外设
pot = ADC(Pin(2)) #定义34脚为ADC脚(在32~39上可用),可以读取模拟电压
pot.atten(ADC.ATTN_11DB) #衰减设置范围:输入电压0-2.45v
sht4x_sensor = SHT4x_Sensor(freq=100000, sdapin=6, sclpin=7)
然后调用相关函数,打印显示结果
measure_data = sht4x_sensor.measurements()
temp = measure_data[0]
humd = measure_data[1]
pot_value = pot.read_uv()/1000.0
oled.fill(0)
oled.text(f'Temp:{temp:.1f} C',10,15)
oled.text(f'Humd:{humd:.1f} %',10,30)
oled.text(f'lig:{pot_value:.1f} mV',10,45)
oled.show()
print(f'Temp:{temp:.1f}')
print(f'Humd:{humd:.1f}')
print(f'light sensor:{pot_value:.1f} mV')
print('')
由于我手上这个是sht40,跟大家手上的sht20不一样。所以对应的库是我自己改的。后面也会提供代码。
上面就是我对几个必选任务的总结了,我还另外买了一些配件,另外发帖给大家汇报一下。
回归主题,我还是再次感谢主办方给我这次机会,整个活动下来,我觉得seeed的micropython生态我觉得还是有些乱,有些驱动也是在网上git下来的,因为不是自己造的轮子,也说不清是不是对的。开源共享应该更加面向实际项目应用,而不是像现在这样有些乱的状态。也可能是我还没玩熟悉这样的项目,小家之言,如有不同,那就是你对,哈哈。
|