459|2

20

帖子

8

TA的资源

一粒金砂(中级)

楼主
 

【得捷Follow me第3期】远程无线开灯提醒器 [复制链接]

  本帖最后由 eew_dy9f48 于 2023-12-12 20:58 编辑


 

必做任务1:使用MicroPython系统

 

esptool是乐鑫的官方刷机程序,可以从baidu上下载到,下载完成后,通过以下命令来清空当前flash内的内容,其中COMx是开发板对应的串口号。

python esptool.py -p COMx -b 460800 --before default_reset  --chip esp32c3  erase_flash 

随后去micropython官网下载ESP32_GENERIC_C3-20231005-v1.21.0.bin, 并使用命令即可完成固件刷写。

python esptool.py -p COMx -b 460800 --before default_reset  --chip esp32c3  write_flash --flash_mode dio --flash_size detect 0x0 ESP32_GENERIC_C3-20231005-v1.21.0.bin

接着写一个简单的小程序,验证一下micropython是否刷写成功:

 


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

先按照下图方式安装所需的库文件:

安装好后将OLED屏与开发板进行连接,scl与sda引脚分别连接GPIO10和GPIO9,供电使用3.3V进行供电。

屏幕初始化的代码十分简单,先初始化I2C对象,接着把这个I2C对象作为参数初始化一个oled对象即可。我们试着在屏幕上写一段文字,并画一个方框作为外框,可以看到一切正常。

i2c = machine.SoftI2C(machine.Pin(10), machine.Pin(9))
oled = SSD1306_I2C(128, 64, i2c, vfilp=1, hfilp=1)

oled.fill(0)
oled.rect(5, 25, 116, 15, 1)
oled.text('Hello EEWORLD!', 8, 29, 1)
oled.show()

 

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

这里我使用的是一颗无源蜂鸣器,直接把他插在面包板上,正极接3.3V,负极接GPIO8。这样当GPIO8为LOW时电路导通,为HIGH时电路断开。这样接线的好处是一般情况下单片机的开漏输出能力都会高于推挽,可以更好的驱动蜂鸣器进行工作。

驱动方法使用的是PWM方法,只需要设置合适的PWM占空比,接着按照乐谱的顺序,调整相应的PWM频率即可。在播放音乐时,屏幕会显示playing字样。

oled.fill(0)
oled.text('Playing', 30, 29, 1)
oled.show()
tones = {'1': 262, '2': 294, '3': 330, '4': 349, '5': 392, '6': 440, '7': 494, '-': 0}
melody = "334554321123322-334554321123211-"
beeper = machine.PWM(machine.Pin(8, machine.Pin.OUT))
for tone in melody:
    freq = tones[tone]
    if freq:
        beeper.init(duty=1000, freq=freq) 
    else:
        beeper.duty(0) 
    time.sleep_ms(400)
    beeper.duty(0) 
    time.sleep_ms(100)
beeper.deinit() 

 

必做任务4:连接WiFi网络

Micropython内置了一个network库,可以用几行代码很方便的连接到wifi。连接成功后,会获取到本机的ip,并将ip地址显示在屏幕上。

wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.disconnect()
wifi.connect(ssid, password)
while not wifi.isconnected():
    pass

oled.fill(0)
oled.text('IP Address:', 2, 20, 1)
oled.text(wifi.ifconfig()[0], 2, 35, 1)
oled.show()

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

外部传感器我选用的是一颗光敏电阻传感器,光敏电阻传感器有暗电阻和亮电阻两种状态,我选用的这颗是5506,亮电阻差不多2-6k欧姆,暗电阻0.15M欧姆。使用一颗10K左右的电阻进行分压后,接入GPIO2引脚,这个引脚在C3上是有ADC功能的,因此可以测量模拟量。用micropython 内置的ADC方法测量到读数后,会得到一个0-4095的值,我们把这个值显示在OLED上,并持续测量5秒钟。

adc = machine.ADC(2)

t=time.time()
while time.time() - t < 5:
    oled.fill(0)
    oled.text('Brightness:', 2, 20, 1)
    oled.text(str(adc.read()), 2, 35, 1)
    oled.show()

 

可选任务6:远程无线开灯提醒器

完成这个任务需要一些额外的硬件,首先xiao在这里用作传感器,用来获取光亮度数据;另外一片单片机作为执行单元,负责进行开灯提醒,或是直接自动控制开灯关灯。只要是带有网络功能的单片机都可以使用,这里我用了一块esp32s3,一样也是运行micropython。他们之间的通讯使用物联网常用的MQTT协议进行。而MQTT还需要一个服务器,作为MQTT Broker,这个服务器使用树莓派进行制作。

在活动中我还申请了一块树莓派CM4计算模块,它的硬件配置与4B相当,但不能直接使用,因为只是一块核心板,需要搭配底板一起使用。

底板的选用在这个项目上范围非常大,几乎没有任何限制。因为作为MQTT broker,我们只需要确保系统能正常运行,以及WIFI能连接即可。因此对底板的要求只有两个,一是供电,二是TF卡槽,负责储存固件。而下至第三方b型底板,上至reterminal,都可以做到以上两点要求。这里我们就选用一块最普通的bigtree 的底板来使用。

第一步是插入TF卡烧录固件。这一步只需要下载Pi imager即可完成傻瓜式烧录。为了尽可能低功耗长期稳定使用,我们最好烧录Lite版本的固件,这样对系统资源消耗最少。

接着,我们要确保系统是最新的。为此,输入以下命令来更新系统:

sudo apt update
sudo apt upgrade


这将更新系统并安装任何可用的更新。

接下来就可以正式安装Mosquitto。在终端中运行以下命令:

sudo apt install mosquitto mosquitto-clients


在安装过程中,包管理器会自动配置Mosquitto服务器在开机时启动,这是以systemctl的方式进行控制的。

安装完成后,设备上将启动并运行Mosquitto MQTT代理。

为了验证Mosquitto是否已成功安装并正在运行,可以使用以下命令:

sudo systemctl status mosquitto

这将显示Mosquitto服务的状态。如果服务已经成功启动,应该会在输出中看到"active (running)"字样。

但是到目前为止这个broker还仅支持本机发送的指令,如果想要真正作为服务器,让其他客户设备接入,需要进行一下配置。

 

首先打开并编辑配置文件mosquitto.conf

sudo nano /etc/mosquitto/mosquitto.conf

在里面加入以下内容

listener 1883
allow_anonymous true

最后再重启服务,就可以完成配置。

sudo systemctl restart mosquitto

最后实现的效果,可以参考演示视频的最后部分。

 

下载链接:https://download.eeworld.com.cn/detail/eew_dy9f48/630258

最新回复

树莓派CM4计算模块么有用上   详情 回复 发表于 2023-12-13 07:33
点赞 关注
 
 

回复
举报

6593

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

树莓派CM4计算模块么有用上

点评

仔细看文章,MQTT BROKER就是跑在CM4上的  详情 回复 发表于 2023-12-13 11:20
 
 
 

回复

20

帖子

8

TA的资源

一粒金砂(中级)

板凳
 
Jacktang 发表于 2023-12-13 07:33 树莓派CM4计算模块么有用上

仔细看文章,MQTT BROKER就是跑在CM4上的

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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