【得捷电子Follow me第2期】四个任务汇报帖子
[复制链接]
大家好,我是尘世间一个小小单片机工程师,工作多年还是玩本地东西,完全跟不上时代。
刚好遇到得捷电子这个活动,兴高采烈参加,奈何工作和家庭都很繁忙,最近终于是把自己搞病了,在家不用带孩子做家务的情况下,开始做这个任务(也不知道是该高兴还是说该悲哀)
实力有限,时间有限,所以这次几个任务做得不是特别满意,搞懂了一些地方,有些东西至今还不懂。
一、首先说一下开发环境和硬件配置、软件配置
这次拿到的开发板是Adafruit ESP32-S3 TFT Feather,板子非常小巧,自带TFT液晶屏,按键,RGB,LED,自带串口,circuit python更是不需要开发环境,直接写代码就可以了,这个实在惊艳到我。
小巧的开发板,还没有我的苹果12雷布斯加强版宽呢,顺便给我的老婆孩子表个白
拿到板子只要下载circuit python固件就可以了,下载方式也很简单,快速按rst按键两次进入UF2模式,在把circuit python固件放到发现的U盘即可,固件在下面链接下载,用US固件就好,中文拼音固件真的只是拼音。
Feather ESP32-S3 TFT Download (circuitpython.org)
开发环境用vscode + Espressif IDF插件 + PlatformIO插件 + Pymakr插件 + circuitpython插件,用下来感觉是挺方便的。可以很简单安装对应的包,只需要在vscode用ctrl + shift + p,输入circuit python:Show Available Libraries,然后输入需要的包名,有的话直接点击就会下载对应的包到板子里。
装上插件之后,vscode更是可以连接板子的串口,进行在线调试,当然circuit python本来也可以通过WiFi链接网络串口,这种无线调试是我一直听说,感觉十分有用的功能。
二、任务1:控制屏幕显示中文
任务1最难的地方是创建想要的bdf字库,芯片资源有限,字库里的字不能那么多,如果真的要最精简就需要逐个字逐个字的选择。生成步骤如下
1、选择需要的ttf字体文件,用FontForge打开
2、逐一勾选需要使用的字符字形,然后编辑菜单中反选(Edit->Select->Invert)
3、编码菜单中分离并移除反选后的字形(Detach & Remove)
4、元素菜单中,设置字体属性取消垂直尺寸(Element->Font info->General->Vertical)
5、元素菜单中,可用位图设置75DPI对应的像素大小(Element->Bitmap Available)
6、元素菜单中,可用位图设置75DPI对应的像素大小(Element->Regengrate)
7、文件菜单中,生成字体文件(File->Generate Fonts)
8、生成类型:No Outline Font->BDF
9、BDF文件可以在CircuitPython中直接使用,也可以转换为pcf格式,更小更快
然后程序就是调用库函数了,LCD显示原理大概就是一个Group对象是一个页面,上面可以显示不同的图像(文字),文字的位置,大小,内容之类的都可以动态更改。
我的程序就在要求之上加了个滚动效果,具体可以看我上传的代码
三、任务2:网络功能使用
网络功能是esp32最基础的功能,而wifi更能更是有内部库(wifi)可以调用。ap功能只需要定义ssid和password,然后调用
wifi.radio.start_ap(ssid , password)即可。
而连接wifi只需要调用wifi.radio.connect(ssid , password)就可以连接上路由器。
然后通过pool = socketpool.SocketPool(wifi.radio)函数创建套接字,
requests = adafruit_requests.Session(pool, ssl.create_default_context())创建一个request
然后用response = requests.get(JSON_TIME_URL)就可以获取链接的返回值,通过response.json()可以拿到返回的json字典。
我在网上找了两个时间戳的api,分别是淘宝的http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp1和拼多多的http://api.pinduoduo.com/api/server/_stm,程序里两个都做了解析,具体可以参考代码。
四、任务3:控制WS2812B
WS2812B是一款控制RGB的芯片,我之前也没用过,第一次通过调用官方库,直接使用,感觉非常方便,只需要给出(R , G , B)的值就可以控制1600万色还是很神奇的。程序做了一个简单的控制效果。个人觉得没什么好说的,跟单片机差不多
五、任务4:日历&时钟
由于我的时间有限,所以第四个任务只做了一个,之前没看清楚,所以外设也没买到。日历时钟就很简单了,我添加了心知天气的api,增加了天气显示,心知天气的api使用可以参考以下链接
查看你的 API 密钥 | 心知天气文档 (seniverse.com)
具体还是要去官网注册一下,获得一个私钥,才可以获得天气数据。
代码就是综合了第一个任务还有第二个任务。
以下是我的项目短视频:
【得捷电子Follow me第2期】 项目汇报-【得捷电子Follow me第2期】 项目汇报-EEWORLD大学堂
这个链接是我的项目代码:
【得捷电子Follow me第2期】四个任务的程序源码-嵌入式开发相关资料下载-EEWORLD下载中心
六、活动心得体会
这次活动是我第一次参加,特别感谢主办方,对于国内的软件开发,我觉得需要很多这样子的活动。作为一个工程师,感觉平时实在是有些闭门造车了,国内的开源环境自我感觉一般般吧,现在的社区做得越来越封闭,有这些活动可以把大家聚在一起,互相学习进步。或许短期看不出什么,我觉得长期是对中国科研有利的。
个人一点点小意见,活动很好,也很详尽,就是我一个小白,不知道这些库要怎么用,库里面有什么api,怎么让自己知道自己要用什么库。迷迷茫茫,懵懵懂懂的,不过经过这个活动之后,我也会行动起来,多活跃在网络上,学习进步。
最后的最后,我个人还遇到一些小问题,就是我的vscode打开circuit python板子的U盘后,一直报错"G:\code.py"正在替代 stdlib 模块"code"
|