1495|4

19

帖子

3

TA的资源

一粒金砂(中级)

楼主
 

【得捷电子Follow me第1期】任务2:驱动外设 [复制链接]

  本帖最后由 你家吃的 于 2023-4-22 14:25 编辑

驱动LED、OLED显示屏、蜂鸣器等外设。

搭配器件:Raspberry Pi Pico w开发板、GROVE SHIELD、GROVE OLED扩展板、GROVE BUZZER扩展板

 


    外设模块如下图

   

    对于LED的点亮闪烁,在第一篇已经点过了。

    下文主要开始对蜂鸣器和OLED的驱动。




  1. 驱动蜂鸣器

                蜂鸣器的引脚如下图所示,在板子引脚槽里找到匹配的插口,怼进去。

蜂鸣器的测试代码如下

  • 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

效果视频如下

播放器加载失败: 未检测到Flash Player,请到安装
304_1681564269

 

功能实现方法很多,或者手动更改引脚的高低电平,或者使用定时器的中断模拟电平变换的频率。我代码里使用定时器生成了pwm,占空比为50。

没想到还有什么花样可玩,简单感受一下各个频率下的声音。

 

下面是OLED的测试。



  1. OLED 0.96测试

    需要的依赖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()

显示效果如下

 

    如果要显示汉字,除了自己造一些字库,还可以使用开源的,地址:
链接已隐藏,如需查看请登录或者注册
   。懒的话也可从我这里下一个 MicroPython-uFont-master.zip (305.95 KB, 下载次数: 11) ,压缩包里有用例。
 
 

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的理解,纯白菜鸟,理解错误,请批评,一定改正:

    看官方的

链接已隐藏,如需查看请登录或者注册
,可以看到,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编码就可以使用了。

 

第二任务到此结束!!!

 

 

 

OEL Display Module.pdf

744.43 KB, 下载次数: 3

SSD1315.pdf

673.79 KB, 下载次数: 1

Air530 GPS模块用户手册V1.9.pdf

919.37 KB, 下载次数: 2

最新回复

大佬,字库文件是怎么上传的?麻烦教一下,谢谢了。  详情 回复 发表于 2023-5-9 19:17
点赞 关注
 
 

回复
举报

19

帖子

3

TA的资源

一粒金砂(中级)

沙发
 
奇怪了,帖子已发表,就没机会编辑了,很可惜第一篇已经发了,很好奇你们是怎么不发表而预览效果的呢
 
 
 

回复

1716

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 

micropython解释环境都是用c语言写,然后编译出来,感觉多少可以使用c语言的逻辑去理解micropython运行逻辑,确实方便不少

 
 
 

回复

7141

帖子

11

TA的资源

版主

4
 
大佬,字库文件是怎么上传的?麻烦教一下,谢谢了。

点评

抱歉抱歉,最近忙其他事情了。这个不难,在本地文件列表文件上右键,选择下载到设备,就可以了。  详情 回复 发表于 2023-5-20 21:48
 
 
 

回复

19

帖子

3

TA的资源

一粒金砂(中级)

5
 
lugl4313820 发表于 2023-5-9 19:17 大佬,字库文件是怎么上传的?麻烦教一下,谢谢了。

抱歉抱歉,最近忙其他事情了。这个不难,在本地文件列表文件上右键,选择下载到设备,就可以了。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

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