本帖最后由 飞扬自我 于 2023-12-17 19:54 编辑
感谢:
大家好,我是参与Follow me第3期活动的一员,非常高感谢eeworld网站和得捷电子为我们提供了这次宝贵的机会,让我连续参加了一到三期的活动,我一个硬件工程师,对microphython一无所知,通过学习论坛的网友会组织的视频教学,使我学会了简单的使用。在开发过程中,和活动的微信群其他网友进行交流得到和很多实用的建议,使我能够更好地理解和使用开发板的各项功能。这对于我这个初学者来说意义非凡。
一,视频展示
3分钟视频
二,任务
必做任务1:使用MicroPython系统 |
必做任务2:驱动扩展板上的OLED屏幕 |
必做任务3:控制蜂鸣器播放音乐 |
必做任务4:连接WiFi网络 |
必做任务5:使用外部传感器 |
可选任务6:分任务3:开灯提醒器 |
三,各小任务详解
任务一:使用MicroPython系统
见帖 【得捷电子Follow me第3期】任务1:使用MicroPython系统
任务二:驱动扩展板上的OLED屏幕
一、任务主要内容
- 开发板底板熟悉
- OLED的配置
- OLED中文和汉字显示
二、任务实施
2.1 开发板底熟悉
xiao esp32c3开发底板接口如下:
2.2 OLED驱动库安装
xiao esp32c3的oled需要安装驱动库,使用的是ssd1306py的驱动库,在thony上面工具--库管理中搜索安装就行,
三、运行MicroPython程序
3.1 初始化OLED
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
lcd.init_i2c(7,6,128,64)
lcd.set_font(font16, 16)
①对驱动oled的I2C初始化
②OLED初始化
③OLED显示格式设置
3.2 显示汉字的字模
为了显示汉字“你好”做的汉字字模,不想做显示库了
font16 = {
0xe4bda0:
[0x08, 0x08, 0x08, 0x11, 0x11, 0x32, 0x34, 0x50, 0x91, 0x11, 0x12, 0x12, 0x14, 0x10, 0x10, 0x10, 0x80, 0x80,
0x80, 0xFE, 0x02, 0x04, 0x20, 0x20, 0x28, 0x24, 0x24, 0x22, 0x22, 0x20, 0xA0, 0x40], # 你
0xe5a5bd:
[0x10, 0x10, 0x10, 0x10, 0xFC, 0x24, 0x24, 0x25, 0x24, 0x48, 0x28, 0x10, 0x28, 0x44, 0x84, 0x00, 0x00, 0xFC,
0x04, 0x08, 0x10, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA0, 0x40] # 好
}
3.3 OLED驱动程序
from machine import Pin, SoftI2C, RTC
import ssd1306py as lcd
import time
font16 = {
0xe4bda0:
[0x08, 0x08, 0x08, 0x11, 0x11, 0x32, 0x34, 0x50, 0x91, 0x11, 0x12, 0x12, 0x14, 0x10, 0x10, 0x10, 0x80, 0x80,
0x80, 0xFE, 0x02, 0x04, 0x20, 0x20, 0x28, 0x24, 0x24, 0x22, 0x22, 0x20, 0xA0, 0x40], # 你
0xe5a5bd:
[0x10, 0x10, 0x10, 0x10, 0xFC, 0x24, 0x24, 0x25, 0x24, 0x48, 0x28, 0x10, 0x28, 0x44, 0x84, 0x00, 0x00, 0xFC,
0x04, 0x08, 0x10, 0x20, 0x20, 0xFE, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xA0, 0x40] # 好
}
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
lcd.init_i2c(7,6,128,64)
lcd.set_font(font16, 16)
lcd.clear()
lcd.text('The first test!', 10, 0, 8)
lcd.text_cn('你好', 40, 30, 16)
lcd.show()
time.sleep(2)
while True:
lcd.clear()
lcd.text('Thanks EEworld!', 10, 10, 8)
lcd.text('Thanks DigiKey!', 10, 30, 8)
lcd.show()
time.sleep(1)
四、效果
图片:
视频:
实验二视频
任务三:控制蜂鸣器播放音乐
一、任务主要内容
二、任务实施
2.1 开发板底熟悉
xiao esp32c3开发底板接口如下:
从底板的介绍和管脚分配来看,A3是分配给蜂鸣器。 但是xiao esp32c3开发板的管脚是GPIO5
2.2 蜂鸣器管脚配置
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
把GPIO5配置为output,并指定为pwm功能。
三、运行MicroPython程序
3.1 初始化各个音符的频率数据
def DO(time):
buzzer.freq(1046) #1
buzzer.duty_u16(vol)
sleep(time)
def RE(time):
buzzer.freq(1175) #2
buzzer.duty_u16(vol)
sleep(time)
def MI(time):
buzzer.freq(1318) #3
buzzer.duty_u16(vol)
sleep(time)
def FA(time):
buzzer.freq(1397) #4
buzzer.duty_u16(vol)
sleep(time)
def SO(time):
buzzer.freq(1568) #5
buzzer.duty_u16(vol)
sleep(time)
def LA(time):
buzzer.freq(1760) #6
buzzer.duty_u16(vol)
sleep(time)
def SI(time):
buzzer.freq(1967) #7
buzzer.duty_u16(vol)
sleep(time)
def N(time):
buzzer.duty_u16(0) #close
sleep(time)
把音附 1 2 3 4 5 6 7对应的频率进行定义,方面音乐的时候做简化
3.1 运行的程序
做了一个简单的《生日快乐》的音乐
import machine
from machine import Pin, PWM
from time import sleep
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
# buzzer = PWM(Pin(20))
vol = 1300 #音量大小
def DO(time):
buzzer.freq(1046) #1
buzzer.duty_u16(vol)
sleep(time)
def RE(time):
buzzer.freq(1175) #2
buzzer.duty_u16(vol)
sleep(time)
def MI(time):
buzzer.freq(1318) #3
buzzer.duty_u16(vol)
sleep(time)
def FA(time):
buzzer.freq(1397) #4
buzzer.duty_u16(vol)
sleep(time)
def SO(time):
buzzer.freq(1568) #5
buzzer.duty_u16(vol)
sleep(time)
def LA(time):
buzzer.freq(1760) #6
buzzer.duty_u16(vol)
sleep(time)
def SI(time):
buzzer.freq(1967) #7
buzzer.duty_u16(vol)
sleep(time)
def N(time):
buzzer.duty_u16(0) #close
sleep(time)
while True:
SO(0.17) #5
N(0.01) #0
SO(0.17) #5
LA(0.33) #6
SO(0.33) #5
DO(0.33) #1
N(0.01) #0
SI(0.33) #7-
N(0.01) #0
SI(0.33) #7-
SO(0.33) #5
LA(0.33) #6
SO(0.33) #5
RE(0.33) #2
N(0.01) #0
DO(0.33) #1
N(0.01) #0
DO(0.33) #1
SO(0.33) #5
SO(0.33) #5
MI(0.33) #3
DO(0.33) #1
N(0.01) #0
DO(0.33) #1
SI(0.33) #7-
LA(0.33) #6
N(0.01) #0
LA(0.33) #6
N(0.01) #0
FA(0.33) #4
N(0.01) #0
FA(0.33) #4
MI(0.33) #3
RE(0.33) #2
DO(0.33) #1
N(0.01) #0
DO(0.33) #1
N(0.67) #0
四、效果
任务三
任务四:连接WiFi网络
一、任务主要内容
- 开发板底板熟悉
- wifi的配置
- wifi连接后打印RSSI
二、任务实施
2.1 开发板底熟悉
xiao esp32c3开发板
xiao esp32c3开发板的天线需要外接天线,然后通过配置wifi参数就可以连接上wifi了。
三、运行MicroPython程序
3.1 运行代码
import utime
from machine import Pin, SoftI2C, RTC
import ssd1306py as lcd
import network
import time
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))
lcd.init_i2c(7,6,128,64)
lcd.clear()
lcd.text('NtpTime', 0, 0, 8)
lcd.show()
time.sleep(1)
#引用库
ssid = "Redmi60"
password = "12345678"
station = network.WLAN(network.STA_IF)#设置工作方式
station.active(True)#打开XIAO C3无线网络
station.connect(ssid,password)#连接wifi
while station.isconnected() == False:
pass
rssi = station.status('rssi')
lcd.clear()
lcd.text('Connection', 0, 0, 8)
lcd.text('successful', 0, 20, 8)
lcd.show()
time.sleep(1)
print("Connection successful")
print(station.ifconfig())
while True:
print(station.status('rssi'))
time.sleep(1)
四、效果
图片
视频
任务五:使用外部传感器
一、任务主要内容
- 开发板底板连接方式
- ATH20传感器硬件介绍
- ATH20传感器数据采集以及OLED显示
二、任务实施
2.1 开发板底板连接方式
xiao esp32c3开发底板接口如下:
2.2 传感器的配置
AHT20模块与OLED共用一个I2C,所以需要对其初始化的时候需要指定地址。
#温湿度传感器
sensor = ahtx0.AHT10(i2c,0x38)
三、ATH20传感器数据采集以及OLED显示
3.1 AHT20的库安装
3.2 其他模块初始化
主要是对OLED的初始化,方便显示测量的数据。
AHT20的数据中有两部分,一部分是温度数据,一部分是湿度数据,得分开处理。
3.3运行的代码
import machine
from machine import Pin, I2C,ADC,PWM
import ahtx0
import ssd1306
import math
import time
i2c = I2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text("Sensor Display:", 0, 0)
oled.text("task 5", 0, 16)
oled.text("Temp: C", 0, 32)
oled.text("Humi: %", 0, 48)
oled.show()
#温湿度
sensor = ahtx0.AHT10(i2c,0x38)
while True:
print("\nTemperature: %0.2f C" % sensor.temperature)
print("Humidity: %0.2f %%" % sensor.relative_humidity)
oled.fill_rect(50, 16, 48, 64, 0)# 局部清屏
oled.text('{:.2f}'.format(sensor.temperature), 50, 32)
oled.text('{:.2f}'.format(sensor.relative_humidity), 50, 48)
oled.show()
time.sleep(1)
四、效果
图片
视频
实验5
任务六:开灯提醒器
一、任务主要内容
- 本次实验使用到的传感器和部件
- 各个模块的配置
- 检测到光亮<20既报警同时震动
二、任务实施
2.1 本次实验使用到的传感器和部件
底板接线示意图
2.2 各个模块的配置
①oled设置
i2c = I2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
②蜂鸣器设置
#配置蜂鸣器
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
vol = 1300 #音量大小
buzzer.freq(1047)
buzzer.duty(0) # 关掉声音
③温湿度设置
#温湿度
sensor = ahtx0.AHT10(i2c,0x38)
④亮度传感器设置
#亮度
bright=ADC(Pin(2))
#配置测量量程为0~3.6V
bright.atten(ADC.ATTN_11DB)
⑤震动马达设置
#震动马达的设置
Vibrate_Pin = machine.Pin(20, machine.Pin.OUT)
Vibrate_Pin.value(0)
三、检测到光亮<20既报警同时震动程序
对亮度传感器进行16次采样做平均值后再做判断,防止单次采集错误导致误触发。
import machine
from machine import Pin, I2C,ADC,PWM
import ahtx0
import ssd1306
import math
import time
i2c = I2C(scl=Pin(7), sda=Pin(6))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
oled.text("Sensor Display:", 0, 0)
oled.text("Bri : %", 0, 16)
oled.text("Temp: C", 0, 32)
oled.text("Humi: %", 0, 48)
oled.show()
#温湿度
sensor = ahtx0.AHT10(i2c,0x38)
#亮度
bright=ADC(Pin(2))
#配置测量量程为0~3.6V
bright.atten(ADC.ATTN_11DB)
sensor_value=0
sensor_dev=0
#配置蜂鸣器
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
vol = 1300 #音量大小
buzzer.freq(1047)
buzzer.duty(0) # 关掉声音
#震动马达初始化
Vibrate_Pin = machine.Pin(20, machine.Pin.OUT)
Vibrate_Pin.value(0)
while True:
for i in range(0,16):
sensor_value = sensor_value +bright.read()
sensor_value = sensor_value / 16
Vbattf = 2 * sensor_value / 10.0
print("\nTemperature: %0.2f C" % sensor.temperature)
print("Humidity: %0.2f %%" % sensor.relative_humidity)
print("\nsensor_value: %0.2f" % sensor_value)
print("Vbattf: %0.2f %%" % Vbattf)
oled.fill_rect(50, 16, 48, 64, 0)# 局部清屏
oled.text('{:.2f}'.format(Vbattf), 50, 16)
oled.text('{:.2f}'.format(sensor.temperature), 50, 32)
oled.text('{:.2f}'.format(sensor.relative_humidity), 50, 48)
oled.show()
time.sleep(1)
if (Vbattf)<20.0:
buzzer.freq(1047)
buzzer.duty(100) # 打开声音
Vibrate_Pin.value(1) # 打开震动
else:
buzzer.freq(1047)
buzzer.duty(0) # 关掉声音
Vibrate_Pin.value(0) # 关掉震动
四,可编译的代码
总结:
过本次的开发体验,让我切身感受到了使用python语言控制板子进行各种任务输出的乐趣。虽然板子面积很小,但是五脏俱全,显示屏、LED灯,wifi模块一应俱全,可以满足很多小功能的开发。这次任务为我打开了嵌入式的新的领域,使我的技能得到了拓展,也了解到了很多之前一知半解的知识,收获满满。
|