【得捷电子Follow me第3期】任务完成汇总2
[复制链接]
Follow me 第3期任务
视频:
//内容二: 任务/项目总结报告//
任务1:使用MicroPython系统(必做任务)
介绍:
MicroPython是一种精简的Python编程语言,可以运行在微型控制器和嵌入式系统上。要使用MicroPython系统,你需要以下步骤:
- 硬件准备:ESP32_c3 .
- 安装MicroPython:
Thonny, Python IDE for beginners
https://thonny.org/
或者直接进仓库下载:
- 编写代码:利用THONNY编辑器中编写代码,然后将代码传输到设备上。
- 连接设备:先烧录好支持thonny的ESP32 C3的BIN,用USB数据线将设备连接到计算机。
- 传输代码:利用thonny的将代码上传到设备上并执行。
- 运行代码:代码成功上传到设备上,可以通过串口或OLED屏幕等设备查看输出结果。
任务2:驱动扩展板上的OLED屏幕(必做任务)
利用Thonny中驱动扩展板上的OLED屏幕,连接方式是通过IIC来驱动OLED屏幕的,OLED屏幕通过I2C接口与ESP32 C3上的,具体引脚是时钟和数据脚分别为6脚(SDA)和7脚 (SCL),屏幕是ssd1306,使用的库是ssd1306库
以下是一些通用的步骤,可以帮助你在Thonny中驱动扩展板上的OLED屏幕:
- 确认OLED屏幕的型号和连接方式。查看OLED屏幕的规格书或说明书,了解其通信接口、引脚定义等。
- 连接OLED屏幕。根据OLED屏幕的C3的6脚(SDA)和7脚 (SCL)对应引脚上,这里是直接扣上去就可以使用了。
- 在Thonny中导入必要的SSD1306的库。
- 编写驱动程序,测试驱动程序。将驱动程序上传到C3开发板上,并运行Thonny中的程序。观察OLED屏幕是否正常显示,检查驱动程序是否工作正常。
显示圆:
中文:
任务3:控制蜂鸣器播放音乐(必做任务)
参考的资料,这个是给了我一定启发的,所以这里我贴出来。
1、
import time
from time import sleep
import machine
from machine import Pin, SoftI2C
# Buzzer settings
buzzer_pin = machine.Pin(5, machine.Pin.OUT)
buzzer = machine.PWM(buzzer_pin)
buzzer.freq(1047)
# Buzzer working
while True:
buzzer.duty(10)
time.sleep(1)
buzzer.duty(0)
time.sleep(1)
2、
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()
蜂鸣器所在的位置:
任务4:连接WiFi网络(必做任务)
先来看图:
天线一定要接上去,不然会玩不转。
下面进行,有参考示例:
-
导入 wifi 库。在 Thonny 的代码编辑器中,输入以下代码并运行:
import network
设置 WiFi 参数。要连接的 WiFi 网络的名称(SSID)和密码。在 Thonny 的代码编辑器中,输入以下代码并运行:
-
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PASSWORD)
替换 SSID 和 PASSWORD 屋内的 WiFi 网络的真实名称和密码。我这里是CMCC_....),mei1372823.......
-
等待连接成功。你可以使用以下代码来等待连接成功:
while not wlan.isconnected():
time.sleep(1)
print('connected to network')
-
测试网络连接。使用 wlan.ifconfig() 命令来查看网络连接的详细信息,IP 地址、子网掩码等。在 Thonny 的代码编辑器中,输入以下代码并运行:
print(wlan.ifconfig())
- 查看类似于以下输出:
实际用到的代码:
# Execute the functions
scan_and_connect()
# 从时间服务器获取时间
ntptime.settime()
while True:
# 获取当前时间戳,此处加了8小时的时区差
current_time = utime.time() + 8 * 60 * 60
print("Current Time:", current_time)
# 将时间戳转换为本地时间
local_time_value = utime.localtime(current_time)
print("Local Time:", local_time_value)
# 根据日期时间转换,便于打印和显示
local_data = "{:02d}-{:02d}-{:02d}".format(local_time_value[0], local_time_value[1], local_time_value[2])
local_time = "{:02d}:{:02d}:{:02d}".format(local_time_value[3], local_time_value[4], local_time_value[5])
print(local_data)
print(local_time)
# 更新显示内容
oled.fill(0)
oled.text(local_data, 10, 25)
oled.text(local_time, 10, 40)
oled.show()
# 延时1秒
utime.sleep(1)
任务5:使用外部传感器(必做任务)
连接方式 :
在 Thonny 中获取环境光传感器或温湿度传感器的数值。以下是获取传感器数值的一般步骤:
- 导入所需的库。在 Thonny 的代码编辑器中,导入与传感器相关的库。
库地址:https://pypi.org/search/?q=aht20
- 设置传感器引脚。
温湿度传感器模块 连接至扩展板的 I2C 接口(开关旁边)。将 光传感器模块 连接至扩展板的 A0-D0 接口(蜂鸣器旁边)。
- 初始化传感器。先初始化传感器,然后对连接到传感器引脚并设置传感器的参数。
- 读取传感器数值。使用相应的函数来读取传感器的数值。
from machine import Pin, SoftI2C, ADC
import ssd1306
import utime
import time
from ahtx0 import AHT20
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("ESP32 _ C3 fifth", 0, 0)
oled.text("ATH20:", 0, 16)
oled.text("Humi:", 0, 32)
oled.text("Light:", 0, 48)
oled.show()
# aht20
aht = AHT20(i2c)
# 光照部分
adc = ADC(Pin(2))
adc.atten(ADC.ATTN_11DB)
adc.width(ADC.WIDTH_12BIT) #4095
while True:
temp = aht.temperature
humi = aht.relative_humidity
light_adc = adc.read()
# 计算光照强度单位Lux
light_lux = light_adc * 350 * 1.0 / 4095
# 算出电阻值单位K
light_res = (4095 - light_adc) * 10.0 / light_adc
print("Temp(°):\n");
print('{:.2f}'.format(temp))
print("Humi(%):\n");
print('{:.2f}'.format(humi))
print("Light(lux)\n");
print('{:.2f}'.format(light_lux))
print("Light(K)\n");
print('{:.2f}'.format(light_res))
# 清除变化部分的内容
oled.fill_rect(64,16,64,48,0)
oled.text('{:.2f}'.format(temp), 64, 16)
oled.text('{:.2f}'.format(humi), 64, 32)
oled.text('{:.2f}'.format(light_lux), 64, 48)
oled.show()
# 延时1秒
time.sleep(1)
//内容三:可编译下载的代码//
屏.rar
(3.58 KB, 下载次数: 0, 售价: 5 分芯积分)
蜂鸣器.rar
(1.15 KB, 下载次数: 0, 售价: 5 分芯积分)
总结:
使用Thonny和ESP32开发板进行SSD1306 OLED显示屏、蜂鸣器和WiFi连接的编程的总结。
- SSD1306 OLED显示屏:
在ESP32上使用SSD1306 OLED显示屏,使用I2C接口来通信。首先,对I2C代码初始化,然后设置SSD1306的地址,引脚分配。在Thonny中,使用内置的I2C库来执行这些操作。完成图像,文字,英文,中文显示等。
- 蜂鸣器:
ESP32驱动扩展板上的蜂鸣器通常可以通过GPIO引脚进行控制。在Thonny中,使用的是GPIO库来控制GPIO引脚。通过改变GPIO引脚的电平状态,使蜂鸣器发出声音,和不同频率的声音。
- WiFi连接:
ESP32 C3具有内置的WiFi模块,通过连接到WiFi网络。在Thonny中,首先,用代码中初始化WiFi,然后输入WiFi网络的SSID和密码。如果连接到WiFi网络,就可以通过互联网发送和接收数据。
总之,使用Thonny对ESP32 C3进行编程可以方便地控制各种外设,包括SSD1306 OLED显示屏、蜂鸣器和WiFi连接。通过使用,可以更好地理解如何使用微控制器和互联网进行物联网项目的开发。
|