Loading... ## 前言介绍 心心念念的esp32开发板终于到了,迫不及待地想做一个简单的小项目来测试一下,不幸地发现店家给的所有资料都是基于Arduino IDE等C语言环境开发的案例,本着在硬件层面上能不用C语言坚决不用的痛苦经历和人生苦短我用python的前人经验,我还是决定依靠一年前的树莓派开发经验来浅浅地摸索和尝试一下下,试一下蜂鸣器和LED灯。 先看看效果视频: [蜂鸣器小灯.mp4](https://sanxiansing.xyz/usr/uploads/2022/06/982738383.mp4) ### microPython MicroPython是 Python 3 语言的精简实现 ,包括Python标准库的一小部分,经过优化可在微处理器和受限环境中运行。除了包括选定的核心Python库,MicroPython还包括了给予编程者访问低层硬件的模块。(来自百度百科) 简而言之就是能在微处理器上运行的微缩版python,能控制底层硬件的模块就相当于树莓派里面驱动引脚的RPi.GPIO库。 ### esp32 嵌入式开发和物联网(IoT)领域常用的一款低成本微控制器。所以它显而易见的优点就是便宜!(十块二十几块的那种)光便宜还不够,还具有一定的算力性能以及蓝牙和WiFi模块支持,就像是某乎有人说的那样“IoT领域可能以后有它就没stm32什么戏唱了”,在当前芯片普遍涨价,树莓派已经贵到令人望而却步的情况下,果断还是买它来练手。 ## 组件和环境 <div class="tip inlineBlock info simple small"> 1.esp32开发板一个 </div> <div class="tip inlineBlock share simple small"> 2.无源蜂鸣器、三色LED灯、面包板、杜邦线若干、下载线等 </div> <div class="tip inlineBlock info simple small"> 3.microPython固件版本:esp32 v1.17 </div> <div class="tip inlineBlock share simple small"> 4.开发环境:Thonny3.3.13 </div> 配置开发板环境参考教程链接 https://blog.csdn.net/weixin_44614230/article/details/121641451 ## 代码设计 从[microPython中文文档](http://docs.micropython.01studio.org/zh_CN/latest/index.html)查询了esp32的一些入门的控制代码,简单会用了GPIO口和PWM的控制代码,扒了一下以前树莓派开发做蜂鸣器实验的代码,打算复原一下当初课上做的一首《送别》。 ### 无源蜂鸣器 无源蜂鸣器的管脚用p波驱动,控制引脚输出p波的频率就能控制蜂鸣器音调的高低了,网上稍微查一下中高低音阶对应的频率,控制蜂鸣器每个音调的延迟时间,就能做出一首歌的音调了。《送别》的音调和节奏大致如下,当时课上根据简谱纯手工扒出来的。 ``` #音阶CDEFGAB高中低对应的频率,为了让CBEFGAB正好对应下标1234567,列表第一位填充一个0 CL = [0,220,246,277,293,329,370,415] CM = [0,440,493,554,587,659,739,830] CH = [0,880,987,1108,1174,1318,1479,1664] #《送别》的简谱 songbie = [CM[5], CM[3], CM[5], CH[1], CM[6], CH[1], CM[5], CM[5], CM[1], CM[2], CM[3], CM[2], CM[1], CM[2], CM[5], CM[3], CM[5], CH[1], CM[7], CM[6], CH[1], CM[5], CM[5], CM[2], CM[3], CM[4], CL[7], CM[1], CM[6] ,CH[1],CH[1],CM[7],CM[6],CM[7],CH[1],CM[6],CM[7],CH[1],CM[6], CM[6],CM[5],CM[3],CM[1],CM[2],CM[5],CM[3],CM[5],CH[1], CM[7],CM[6],CH[1],CM[5],CM[5],CM[2],CM[3],CM[4],CL[7],CM[1] ] #每个音调对应所持续的时间 beat = [2, 1, 1, 4, 2, 2, 4, 2, 1, 1, 2, 1, 1, 4, 2, 1, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2, 4, 2, 2, 4, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2,4] ``` 然后就是按照这个频率循环控制p波和延迟,一首歌就出来了。接着在这个循环里面顺便控制一下LED灯就好了。三色LED灯的RGB管脚是由p波的占空比控制,每个管脚的占空比用random(0,255)随机一个255以内的数值,就实现了每个节奏随机变换一次颜色的效果。 ## 源码 能用几十块钱完成的事情,学校却花了上千块买树莓派给我们学,太令人(bai)感动(jia)了! 最后尝试用这个板子成功连上了家里的WiFi,也就是说能联网了,哦等等,能联网了!!那么这块小小的板子突然就有无限可能了起来。  最后源码奉上: <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-7990af2f7bb21de14b5b9cac9bebe22412" aria-expanded="true"><div class="accordion-toggle"><span>buzzer.py</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-7990af2f7bb21de14b5b9cac9bebe22412" class="collapse collapse-content"><p></p> ``` from machine import Pin, PWM import random import time CL = [0,220,246,277,293,329,370,415] CM = [0,440,493,554,587,659,739,830] CH = [0,880,987,1108,1174,1318,1479,1664] makerobo_song_1 = [CM[5], CM[3], CM[5], CH[1], CM[6], CH[1], CM[5], CM[5], CM[1], CM[2], CM[3], CM[2], CM[1], CM[2], CM[5], CM[3], CM[5], CH[1], CM[7], CM[6], CH[1], CM[5], CM[5], CM[2], CM[3], CM[4], CL[7], CM[1], CM[6] ,CH[1],CH[1],CM[7],CM[6],CM[7],CH[1],CM[6],CM[7],CH[1],CM[6], CM[6],CM[5],CM[3],CM[1],CM[2],CM[5],CM[3],CM[5],CH[1], CM[7],CM[6],CH[1],CM[5],CM[5],CM[2],CM[3],CM[4],CL[7],CM[1] ] makerobo_beat_1 = [2, 1, 1, 4, 2, 2, 4, 2, 1, 1, 2, 1, 1, 4, 2, 1, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2, 4, 2, 2, 4, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 1, 1, 2, 2, 2, 2, 4, 2, 1, 1, 2, 2,4] def pwRGB(R,G,B): pwmR.duty(R) pwmG.duty(G) pwmB.duty(B) def makerobo_loop(): for i in range(0,len(makerobo_song_1)): print(makerobo_song_1[i]) pwRGB(random.randint(0,255),random.randint(0,255),random.randint(0,255)) pwm4.freq(makerobo_song_1[i]) time.sleep(makerobo_beat_1[i]*0.4) def makerobo_destroy(): pwm4.deinit() pwmR.deinit() pwmG.deinit() pwmB.deinit() if __name__=="__main__": try: p16=Pin(16,Pin.IN,Pin.PULL_UP) while True: if p16.value()==0: pwmG =PWM(Pin(27), freq=1999, duty=512) pwmR =PWM(Pin(13), freq=5000, duty=512) pwmB =PWM(Pin(2), freq=2000, duty=512) pwm4 =PWM(Pin(4), freq=20000, duty=512) makerobo_loop() makerobo_destroy() except KeyboardInterrupt: makerobo_destroy() ``` <p></p></div></div></div> 最后修改:2022 年 12 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 5 如果觉得我的文章对你有用,请随意赞赏
仅登录用户可评论,点击 登录