462|0

188

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【得捷电子Follow me第3期】任务提交 [复制链接]

  本帖最后由 飞扬自我 于 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开发底板接口如下:

连接传感器的I2C接口

 
AHT20模块以及它的I2C地址为0x38
 

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)  # 关掉震动
    

 

四,可编译的代码

可编译代码.zip (28.85 KB, 下载次数: 0)

总结:

      过本次的开发体验,让我切身感受到了使用python语言控制板子进行各种任务输出的乐趣。虽然板子面积很小,但是五脏俱全,显示屏、LED灯,wifi模块一应俱全,可以满足很多小功能的开发。这次任务为我打开了嵌入式的新的领域,使我的技能得到了拓展,也了解到了很多之前一知半解的知识,收获满满。

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表