402|0

12

帖子

2

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第3期】+项目总结报告 [复制链接]

  本帖最后由 doudoubaba 于 2023-12-18 15:10 编辑

内容一:3-5分钟短视频

 


 

 

内容二: 任务/项目总结报告

 

1 项目介绍

 

1、Seeed Studio XIAO ESP32C3介绍

 

 

Seeed Studio XIAO ESP32C3是一款基于express的物联网迷你开发板 ESP32-C3 WiFi/蓝牙双模芯片ESP32-C3是一款32位RISC-V CPU,包含一个FPU(浮点单元),用于32位单精度运算,具有强大的计算能力。它具有出色的射频性能,支持IEEE 802.11 b/g/n WiFi蓝牙5 (LE)协议。该电路板附带一个外部天线,以增加无线应用程序的信号强度。 它还具有小巧精致的外形,并结合了单面表面贴装设计。 它配备了丰富的接口,具有11个数字I/O,可作为PWM引脚4个模拟I/O,可作为ADC引脚。支持**UART、I2C、SPI等4种串行接口。

(1)引脚

 

(2)组件

 

 

 

 

2、Seeed Studio Expansion Board Base for XIAO扩展版介绍

 

 

一个功能强大的扩展板,适用于Seeed Studio XIAO,仅有Raspberry Pi 4大小的一半。它能够以简单快捷的方式构建原型和项目。具有丰富的外设,包括OLED显示屏、RTC实时时钟、可扩展存储器、无源蜂鸣器、复位/用户按钮、5V舵机连接器、多个数据接口。

 

 

该设备具有外部MicroSD卡插槽和RTC电池座,MicroSD卡主要用于保存和运行 python.py 文件,RTC用于跟踪当前时间,并可用于在特定时间执行操作。

 

 

 

(1)引脚

 

 

3、温湿度传感器Grove - AHT20

 

 

4、光线传感器Grove - Light Sensor v1.2

 

 

5、5向开关Grove - 5-Way Switch

 

 

 

Seeed Studio XIAO ESP32C3焊接排针,完成后如下图所示。

 

  

 

 

按下图方法将Seeed Studio XIAO ESP32C3安装到Seeed Studio Expansion Board Base for XIAO扩展板上。

 

 

 

 

完成后,如下图所示。

 

 

 

 

 

2 各任务功能对应的主要代码片段、功能展示及说明

 

任务1:使用MicroPython系统(必做任务)

熟悉Seeed Studio XIAO ESP32C3开发板基本操作,安装esptool,并给开发板刷写MicroPython系统,完成入门程序的运行

搭配器件:Seeed Studio XIAO ESP32C3

1、下载并安装Python

浏览器输入python.org/downloads/打开python下载页面,点击“Download Python 3.12.1”下载并安装Python。

 

或者点击以下链接下载Python。

https://www.python.org/ftp/python/3.12.1/python-3.12.1-amd64.exe

 

2、安装esptool

 

pip install esptool

 

 

3、下载Micropython固件

https://micropython.org/resources/firmware/ESP32_GENERIC_C3-20231005-v1.21.0.bin

 

 

 

4、设备管理器查看端口号,如下图所示端口号为COM31。

 

 

 

4、擦除固件

esptool --chip esp32c3 --port COM31 erase_flash

 擦除中,如下图所示:

擦除完成,如下图所示:

 

 

5、烧录固件

esptool --chip esp32c3 --port COM31 --baud 921600 write_flash -z 0x0 ESP32_GENERIC_C3-20231005-v1.21.0.bin

固件烧录中,如下图所示。

 

固件烧录完成,如下图所示。

6、安装Thonny

链接已隐藏,如需查看请登录或者注册

 

5、用Thonny访问Seeed Studio XIAO ESP32C3

 

看到如下图所示界面,表示连接成功。

 

至此,任务一完成。

 

任务2:驱动扩展板上的OLED屏幕(必做任务)

使用扩展板上的OLED屏幕显示文字和图形

搭配器件:Seeed Studio XIAO ESP32C3、Seeed Studio Expansion Board Base for XIAO

1、上传库文件到Seeed Studio XIAO ESP32C3

2、编写代码,如下所示。

# 得捷电子Follow me第3期
# 任务2:驱动扩展板上的OLED屏幕(必做任务)
# 作者:豆爸
# 时间:2023-12-17
import time
from machine import Pin, SoftI2C
import ssd1306
import math


i2c = SoftI2C(scl=Pin(7), sda=Pin(6))  
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

oled.fill(0)
oled.text("XIAO-ESP32-C3", 10, 5)
oled.text("Follow me 3", 15, 30)
oled.text("DouDad  20231217", 0, 55)
oled.show() 

3、运行当前代码,如下图所示。

 

文字与图形代码,如下:

# 得捷电子Follow me第3期
# 任务2:驱动扩展板上的OLED屏幕(必做任务)
# 作者:豆爸
# 时间:2023-12-17


from machine import Pin, SoftI2C
import ssd1306
import math


i2c = SoftI2C(scl=Pin(7), sda=Pin(6))  
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

oled.fill(0)

oled.fill_rect(0, 0, 32, 32, 1)
oled.fill_rect(2, 2, 28, 28, 0)
oled.vline(9, 8, 22, 1)
oled.vline(16, 2, 22, 1)
oled.vline(23, 8, 22, 1)
oled.fill_rect(26, 24, 2, 4, 1)
oled.text('Follow me 3', 40, 0, 1)
oled.text("DouDad", 40, 18,1)
oled.text("20231217", 40, 36,1)
oled.text('XIAO-ESP32-C3', 5, 56, 1)
oled.show() 

运行结果,如下图所示。

 

 

 

任务3:控制蜂鸣器播放音乐(必做任务)

使用Seeed Studio XIAO ESP32C3控制蜂鸣器发出不同频率的声音,并播放一段音乐

搭配器件:Seeed Studio XIAO ESP32C3Seeed Studio Expansion Board Base for XIAO

1、编写代码,如下图所示。

# 得捷电子Follow me第3期
# 任务3:控制蜂鸣器播放音乐(必做任务)
# 使用Seeed Studio XIAO ESP32C3控制蜂鸣器发出不同频率的声音,并播放一段音乐——播放歌曲<<他是海盗>>
# 搭配器件:Seeed Studio XIAO ESP32C3、Seeed Studio Expansion Board Base for XIAO
# 作者:豆爸
# 时间:2023-12-17


import machine
import time

# Buzzer settings
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
buzzer.freq(1047)

# Defining frequency of each music note
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

# Music notes of the song, 0 is a rest/pulse
notes = [
    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0,
    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0,
    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0,
    NOTE_A4, NOTE_G4, NOTE_A4, 0,

    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0,
    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0,
    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0,
    NOTE_A4, NOTE_G4, NOTE_A4, 0,

    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0,
    NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, 0,
    NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, 0,
    NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, 0,

    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0,
    NOTE_D5, NOTE_E5, NOTE_A4, 0,
    NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, 0,
    NOTE_C5, NOTE_A4, NOTE_B4, 0,

    NOTE_A4, NOTE_A4,
    #Repeat of first part
    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0,
    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0,
    NOTE_A4, NOTE_G4, NOTE_A4, 0,

    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0,
    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0,
    NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0,
    NOTE_A4, NOTE_G4, NOTE_A4, 0,

    NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0,
    NOTE_A4, NOTE_C5, NOTE_D5, NOTE_D5, 0,
    NOTE_D5, NOTE_E5, NOTE_F5, NOTE_F5, 0,
    NOTE_E5, NOTE_D5, NOTE_E5, NOTE_A4, 0,

    NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0,
    NOTE_D5, NOTE_E5, NOTE_A4, 0,
    NOTE_A4, NOTE_C5, NOTE_B4, NOTE_B4, 0,
    NOTE_C5, NOTE_A4, NOTE_B4, 0,
    #End of Repeat

    NOTE_E5, 0, 0, NOTE_F5, 0, 0,
    NOTE_E5, NOTE_E5, 0, NOTE_G5, 0, NOTE_E5, NOTE_D5, 0, 0,
    NOTE_D5, 0, 0, NOTE_C5, 0, 0,
    NOTE_B4, NOTE_C5, 0, NOTE_B4, 0, NOTE_A4,

    NOTE_E5, 0, 0, NOTE_F5, 0, 0,
    NOTE_E5, NOTE_E5, 0, NOTE_G5, 0, NOTE_E5, NOTE_D5, 0, 0,
    NOTE_D5, 0, 0, NOTE_C5, 0, 0,
    NOTE_B4, NOTE_C5, 0, NOTE_B4, 0, NOTE_A4
]

# Durations (in ms) of each music note of the song
# Quarter Note is 250 ms when songSpeed = 1.0
durations = [
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 375, 125,

    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 375, 125,

    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 125, 250, 125,

    125, 125, 250, 125, 125,
    250, 125, 250, 125,
    125, 125, 250, 125, 125,
    125, 125, 375, 375,

    250, 125,
    #Rpeat of First Part
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 375, 125,

    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 375, 125,

    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 250, 125, 125,
    125, 125, 125, 250, 125,

    125, 125, 250, 125, 125,
    250, 125, 250, 125,
    125, 125, 250, 125, 125,
    125, 125, 375, 375,
    #End of Repeat

    250, 125, 375, 250, 125, 375,
    125, 125, 125, 125, 125, 125, 125, 125, 375,
    250, 125, 375, 250, 125, 375,
    125, 125, 125, 125, 125, 500,

    250, 125, 375, 250, 125, 375,
    125, 125, 125, 125, 125, 125, 125, 125, 375,
    250, 125, 375, 250, 125, 375,
    125, 125, 125, 125, 125, 500
]

def play_song():
    total_notes = len(notes)
    for i in range(total_notes):
        current_note = notes[i]
        wait = durations[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
while True:
    # Play the song
    play_song()

 

2、运行当前代码,如下图所示。

 

 

任务4:连接WiFi网络(必做任务)

将Seeed Studio XIAO ESP32C3连接到WiFi网络,并访问互联网信息

搭配器件:Seeed Studio XIAO ESP32C3Seeed Studio Expansion Board Base for XIAORF ANT 2.4GHZ/5.5GHZ PCB TRACE

1、编写代码,如下图所示。

# 得捷电子Follow me第3期
# 任务4:连接WiFi网络(必做任务)
# 将Seeed Studio XIAO ESP32C3连接到WiFi网络,并访问互联网信息
# 搭配器件:Seeed Studio XIAO ESP32C3、Seeed Studio Expansion Board Base for XIAO、RF ANT 2.4GHZ/5.5GHZ PCB TRACE
# 作者:豆爸
# 时间:2023-12-17
from machine import Pin, SoftI2C
import ssd1306
import network
import time

# Network settings
wifi_ssid = "xiaogui"
wifi_password = "88888888"
i2c = SoftI2C(scl=Pin(7), sda=Pin(6))  
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

def connect_wifi():
    station = network.WLAN(network.STA_IF)
    station.active(True)
    while not station.isconnected():
        print("Connecting...")
        oled.fill(0)
        oled.text("Connecting...", 10, 35)
        oled.show()
        station.connect(wifi_ssid, wifi_password)
        time.sleep(10)

    print("Connected!")
    print("IP Address:", station.ifconfig()[0])
    oled.fill(0)
    oled.text(station.ifconfig()[0], 10, 35)
    oled.show()


connect_wifi()

 

2、运行当前代码,如下图所示。

 

 

任务5:使用外部传感器(必做任务)

连接环境光传感器或温湿度传感器,获取传感器的数值,并转换成真实的物理量

搭配器件: Seeed Studio XIAO ESP32C3Seeed Studio Expansion Board Base for XIAO、 Grove - AHT20 I2C Industrial Grade Temperature and Humidity SensorGrove - Light Sensor v1.2

1、分别将温湿度传感器Grove - AHT20、光线传感器Grove - Light Sensor连接到Seeed Studio Expansion Board Base for XIAO扩展板的I2C接口和A0接口,如下图所示。

 

2、编写代码,如下图所示。

# 得捷电子Follow me第3期
# 任务5:使用外部传感器(必做任务)
# 连接环境光传感器或温湿度传感器,获取传感器的数值,并转换成真实的物理量
# 搭配器件: Seeed Studio XIAO ESP32C3、Seeed Studio Expansion Board Base for XIAO、 Grove - AHT20 I2C Industrial Grade Temperature and Humidity Sensor、Grove - Light Sensor v1.2
# 作者:豆爸
# 时间:2023-12-17

from machine import Pin, ADC, SoftI2C
import utime as time
import ahtx0
import ssd1306

i2c = SoftI2C(scl=Pin(7), sda=Pin(6))  
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

adcPin = 2
sensor_dev = ADC(Pin(2))
sensor_dev.atten(ADC.ATTN_11DB)  # 这里配置测量量程为0~3.6V

sensor = ahtx0.AHT10(i2c)

while True:
    sensor_value = 0
    for i in range(0,16):
        sensor_value = sensor_value + sensor_dev.read()
    light_value = sensor_value / 16   
    Vbattf = 2 * sensor_value / 1000.0    
    resistance = (float)(1023 - sensor_value) * 10 / sensor_value

    print("\nTemperature: %0.2f C" % sensor.temperature)
    print("Humidity: %0.2f %%" % sensor.relative_humidity)  
    print("\nVbattf: %0.2f V" % Vbattf)
    print("sensor_value: %d" % light_value)
    print("resistance: %0.2f" % resistance)

    oled.fill(0)
    oled.text("Temp:" + str(sensor.temperature) + "C", 10, 5)
    oled.text("Humi:" + str(sensor.relative_humidity) + "%", 10, 30)
    oled.text("Light:" +str(light_value), 10, 55)
    oled.show() 

    time.sleep(2)

 

3、运行当前代码,如下图所示。

 

 

任务6:使用外部传感器——Grove - 5-Way Switch

概述:

Grove-5向开关可用于检测开关位置和事件,如单击/双击/长按等。它可以检测左/右/上/下/中心5个方向。5向开关将是多功能控制的绝佳选择。

 

引脚:

 

 

1、首次连接,按住BOOT键,插USB连接电脑。

 

2、启动Arduino应用程序,添加以下地址到首选项中。

 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

 

 

3、开发板选择:XIAO_ESP32C3,并选择正确端口号,如下图所示。

 

4、加载库文件

项目-导入库-添加.zip库

 

 

5、编辑如下代码。

 

#include "Grove_Multi_Switch.h"

GroveMultiSwitch mswitch[1];
const char* grove_5way_tactile_keys[] = {
    "KEY A",
    "KEY B",
    "KEY C",
    "KEY D",
    "KEY E",
};
const char* grove_6pos_dip_switch_keys[] = {
    "POS 1",
    "POS 2",
    "POS 3",
    "POS 4",
    "POS 5",
    "POS 6",
};

const char** key_names;

int deviceDetect(void) {
    if (!mswitch->begin()) {
        Serial.println("***** Device probe failed *****");
        return -1;
    }

    Serial.println("***** Device probe OK *****");
    if (PID_VAL(mswitch->getDevID()) == PID_5_WAY_TACTILE_SWITCH) {
        Serial.println("Grove 5-Way Tactile Switch Inserted!");
        key_names = grove_5way_tactile_keys;
    } else if (PID_VAL(mswitch->getDevID()) == PID_6_POS_DIP_SWITCH) {
        Serial.println("Grove 6-Position DIP Switch Inserted!");
        key_names = grove_6pos_dip_switch_keys;
    }

    // enable event detection
    mswitch->setEventMode(true);

    // report device model
    Serial.print("A ");
    Serial.print(mswitch->getSwitchCount());
    Serial.print(" Button/Switch Device ");
    Serial.println(mswitch->getDevVer());
    return 0;
}

void setup() {
    Serial.begin(115200);
    Serial.println("Grove Multi Switch");

    // Initial device probe
    if (deviceDetect() < 0) {
        Serial.println("Insert Grove 5-Way Tactile");
        Serial.println("or Grove 6-Position DIP Switch");
        for (;;);
    }

    return;
}

void loop() {
    GroveMultiSwitch::ButtonEvent_t* evt;

    delay(1);

    evt = mswitch->getEvent();
    if (!evt) {
        // dynamic device probe
        deviceDetect();
        delay(1000);
        return;
    }

    if (!(evt->event & GroveMultiSwitch::BTN_EV_HAS_EVENT)) {
        #if 0
        Serial.print("No event, errno = ");
        Serial.println(mswitch->errno);
        #endif
        return;
    }

    for (int i = 0; i < mswitch->getSwitchCount(); i++) {
        Serial.print(key_names[i]);
        Serial.print(": RAW - ");
        Serial.print((evt->button[i] & GroveMultiSwitch::BTN_EV_RAW_STATUS) ?
                     "HIGH " : "LOW ");
        if (PID_VAL(mswitch->getDevID()) == PID_5_WAY_TACTILE_SWITCH) {
            Serial.print((evt->button[i] & GroveMultiSwitch::BTN_EV_RAW_STATUS) ?
                         "RELEASED " : "PRESSED ");
        } else if (PID_VAL(mswitch->getDevID()) == PID_6_POS_DIP_SWITCH) {
            Serial.print((evt->button[i] & GroveMultiSwitch::BTN_EV_RAW_STATUS) ?
                         "OFF " : "ON ");
        }
        Serial.println("");
    }

    for (int i = 0; i < mswitch->getSwitchCount(); i++) {
        if (evt->button[i] & ~GroveMultiSwitch::BTN_EV_RAW_STATUS) {
            Serial.println("");
            Serial.print(key_names[i]);
            Serial.print(": EVENT - ");
        }
        if (evt->button[i] & GroveMultiSwitch::BTN_EV_SINGLE_CLICK) {
            Serial.print("SINGLE-CLICK ");
        }
        if (evt->button[i] & GroveMultiSwitch::BTN_EV_DOUBLE_CLICK) {
            Serial.print("DOUBLE-CLICK ");
        }
        if (evt->button[i] & GroveMultiSwitch::BTN_EV_LONG_PRESS) {
            Serial.print("LONG-PRESS ");
        }
        if (evt->button[i] & GroveMultiSwitch::BTN_EV_LEVEL_CHANGED) {
            Serial.print("LEVEL-CHANGED ");
        }
    }
    Serial.println("");
}

 

6、上传代码

 

 

7、打开串口监视器,按压5向开关,即可看到哪个按键被按下,如下图所示。

 

  

 

3 对本活动的心得体会(包括意见或建议)

 

首先感谢EEWORLD组织的此次活动。得益于Seeed XIAO-ESP32-C3开发板、Seeed Studio Expansion Board Base for XIAO扩展板及相关传感器精致的外观、良好性能、优秀的品控,齐全的wiki文档于示例,micropython的易用性、方便性,顺利完成了以此各项任务。唯独遗憾的地方在于没有找到Seeed I2C 5向开关的micropython库,5向开关只能用Arduino C来完成。希望日后找到合适的库,再编写5向开关的Micropython代码。

 

内容三:可编译下载的代码

 

Follow me 第3期任务XIAO-ESP32-C3代码.rar (1.04 MB, 下载次数: 1)
002OLED_text.py (689 Bytes, 下载次数: 1)

 

 

 

点赞 关注
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表