驱动LED、OLED显示屏、蜂鸣器等外设。
搭配器件:Raspberry Pi Pico w开发板、GROVE SHIELD、GROVE OLED扩展板、GROVE BUZZER扩展板
外设模块如下图
对于LED的点亮闪烁,在第一篇已经点过了。
下文主要开始对蜂鸣器和OLED的驱动。
蜂鸣器的引脚如下图所示,在板子引脚槽里找到匹配的插口,怼进去。
蜂鸣器的测试代码如下
import machine
import time
led = machine.Pin(26)
pwm1 = machine.PWM(led)
frep1 = 100
pwm1.freq(frep1)
pwm1.duty_u16(32768)
while True:
frep1 += 100
pwm1.freq(frep1)
time.sleep(.5)
if frep1 > 2400:
frep1 = 200
效果视频如下
功能实现方法很多,或者手动更改引脚的高低电平,或者使用定时器的中断模拟电平变换的频率。我代码里使用定时器生成了pwm,占空比为50。
没想到还有什么花样可玩,简单感受一下各个频率下的声音。
下面是OLED的测试。
需要的依赖ssd1306文件导入到pico中
代码如下
import machine
import time
import ssd1306
import ufont
led = machine.Pin("LED",machine.Pin.OUT)
i2c1 = machine.I2C(0, sda=machine.Pin("GP8"), scl=machine.Pin("GP9"), freq=400000)
display = ssd1306.SSD1306_I2C(128,64,i2c1)
display.fill(0)
display.fill_rect(0, 0, 32, 32, 1)
display.fill_rect(2, 2, 28, 28, 0)
display.vline(9, 8, 22, 1)
display.vline(16, 2, 22, 1)
display.vline(23, 8, 22, 1)
display.fill_rect(26, 24, 2, 4, 1)
display.text('MicroPython', 40, 0, 1)
display.text('SSD1306', 40, 12, 1)
display.text('OLED 128x64', 40, 24, 1)
display.text('zhangyongqiang!!', 5, 36, 1)
display.show()
while True:
time.sleep(.5)
led.on()
time.sleep(.5)
led.off()
显示效果如下
main.py代码如下
import machine
import time
import ssd1306
import ufont
led = machine.Pin("LED",machine.Pin.OUT)
i2c1 = machine.I2C(0, sda=machine.Pin("GP8"), scl=machine.Pin("GP9"), freq=400000)
display = ssd1306.SSD1306_I2C(128,64,i2c1)
f = ufont.BMFont("./unifont-14-12917-16.v3.bmf")
f.text(display, "你好", 0, 0, color=0xf8, show=True)
f.text(display, "helloworld", 0, 14, color=0xf8, show=True)
while True:
time.sleep(.5)
led.on()
time.sleep(.5)
led.off()
显示效果很喜人
micropython的理解,纯白菜鸟,理解错误,请批评,一定改正:
看官方的github,可以看到,micropython解释环境都是用c语言写,然后编译出来,感觉多少可以使用c语言的逻辑去理解micropython运行逻辑。
下图高亮所示,当引用类的时候,括号是被引用进来使用的模块,成为本类的子类,而我们使用某个模块,按照类中_ init_函数传入参数,相似于c++方式,有默认参数的可以不传参。
framebuffer用于保存位图数据,用于显示,其中包含了fill text等成员函数。
------------------------------------------------------
像素虽然低,只有亮灭两种表现形式,不过仍然可以显示一些简单的图片,这是抄袭地址,有图片转换地址,还有测试代码
main.py代码
import machine
import time
import ssd1306
import framebuf
import base64
import math
led = machine.Pin("LED",machine.Pin.OUT)
i2c1 = machine.I2C(0, sda=machine.Pin("GP8"), scl=machine.Pin("GP9"), freq=400000)
display = ssd1306.SSD1306_I2C(128,64,i2c1)
showDis=b'gED//////////////////////////////+Af//////////////////gAA//////////////////B//j/////////////////D//+f//////////wAD///H///z//////////wfwB//n///+f/////////5//+A/z////z/////////+///+Ax////+f4f///////v////B/////3wB///////7////8/////8w/P//////+f///+f/8///h/7///////z////n/+H//4/+///////+P///z//h///P/P///////w///5//4f//zwAP///////B//8//+H//+cHgP//////+A//P//////n//w////////AP3//////9///H////////gB///////P//8/////////4///////z///P/////////P//////8///7/////////z///////n//8/////////9///////5//+P/////////f//////+f/+H/////////n///////n//H/////////5///////5//3/////////+f///4//+f/9//////////v////n//n//f/////////7////5//5//3/////////+///+Of//f/9//////////v///AP//3//f/////////7///wD//9//3/////////+///+Af//f/9//////////v///jn//3//f/////////7////5//5//3/////////+f///8f/+f/9//////////n///+P//n//f/////////5///////5//3/////////+f//////+f/8//////////3///////n//D/////////8///////5//+f/////////P//////+f//z/////////7///////n//+/////////8f//////7///v////////gH//////8///z///////4B9///////P//5///////Af/P//////z//4//////+D//5//8///9x/gf/////+P//+f/+H//+cAA//////+P///z//h///n+P///////P///+f/4f//5/7///////n////z/+H//8f+///////7////+f/////D/P//////+////+D/////mDH///////v///4Gf////78D///////5///Afx////8//////////H/4B//P///+f/////////4AAf//4///+P////////////////j//+P////////////////+H/+H/////////////////4D4H//////////////////4Af////////////////////////////////////////////////////'
def custom_to_buff(data):
width = data[0]
height = data[1]
fbuff = framebuf.FrameBuffer(data[2:],width,height, framebuf.MONO_HLSB)
return fbuff
ziva_image = custom_to_buff(bytearray(base64.b64decode(showDis)))
def show_image(image):
display.blit(image, 0, 0)
display.show()
while True:
display.fill(0)
show_image(ziva_image )
time.sleep(.5)
led.on()
time.sleep(.5)
led.off()
显示效果
其中图片可以通过此网站(https://www.sojson.com/image/change.html),调整一下分辨率,再通过网址(https://gurgleapps.com/tools/image-to-code)转换出来一个base64编码就可以使用了。
第二任务到此结束!!!
本帖最后由 你家吃的 于 2023-4-22 14:25 编辑
引用: lugl4313820 发表于 2023-5-9 19:17 大佬,字库文件是怎么上传的?麻烦教一下,谢谢了。
抱歉抱歉,最近忙其他事情了。这个不难,在本地文件列表文件上右键,选择下载到设备,就可以了。