MicroPython 开发单片机应用上手cherbim3年前发布850单片机开发用得最多的是 C 、C++,而大多互联网应用的开发,主要语言还是 Java 、PHP 、Javascript 、Python 、Go 等等。都说互联网太卷,AI + 物联网是下一个大趋势,但对于软硬一体的嵌入式开发,这之间的跨度还是不小。在 2013 年底一次众筹活动后,剑桥大学科学家 Damien George 开始着手把 Python3 移植到微处理器上运行,称为 MicroPython project ,实现了一个完全 Python 的编译器和运行时。这样,大量熟悉 Python 的软件开发者,只需要编写 Python3 程序,就可以很方便的对物联网硬件、各种传感器进行访问和控制。都 2022 年了,MicroPython 支持的 已经相当丰富,除了官方出品的 Pyboard 以外,经典的 STM32 ,ESP8266 ,ESP32 ,CC3200 等 MCU 均有适配,树莓派新出的 Pico 、赛灵思(最近被 AMD 收购) Xilinx 的 PYNQ 项目也都支持 MicroPython 。这里上手用的是经典又经济的 ESP8266 开发板,相比用较新的板子,更少会遇到开发板、传感器等驱动、兼容性问题。除非是数电大牛,根据厂家技术手册能自己 DIY 电路、编写驱动程序,一般还是尽量避免 Debug 硬件。MicroPython 开发者工具虽然和 Arduino 生态相比还有差距,但 MicroPython 官方提供的工具套件该有的也都有,烧录工具 esptool ,预编译工具 mpy-corss ,交互式解释器 REPL 等等。第三方 IDE 支持的也不少,VSCode 、PyCharm 、Jupyter 、Thonny 、Mu Editor 都有专门的插件或功能模块,支持 MicroPython 的开发。常见的 Terminal 终端比如 PuTTY 、Xshell 也可以直接连接 MicroPython 开发板进行调试。ESP8266 是由乐鑫科技 Espressif 推出的 MCU 模组,全球出货量超过一亿片,在智能物联网(特别是智能家电)市场上是一块广受欢迎的大路货。ESP8266 最大的特色就是内置 WiFi 模块,这对需要联网的设备而言,节省了外接 WiFi 模块的成本(物联网芯片价格上要是便宜一块钱,大规模采购就节省很多钱)。ESP8266 的核心 CPU 是一块 Tensilica L106 32 bit 处理器,RISC 指令集,时钟频率最高 160 MHz ,支持实时操作系统 RTOS ,可以将 80% 的算力留给应用编程和开发。由于后来 Tensilica 被 Cadence 公司收购( Cadence 的名字可能大家比较熟悉,那批断供 HW 的 EDA 公司之一,Cadence 是全球最大的电子设计自动化、半导体技术解决方案和设计服务供应商),没有查到 CPU 的公开规格,参照乐鑫之后推出的升级版 ESP32 采用台积电 40 纳米工艺制程,推测 ESP8266 的芯片制程可能在 65 纳米 / 90 纳米工艺,由于具有深度睡眠功能,所以实现低功耗是没有问题的。由于 RISC 是开源指令集,不会出现 ARM 、X86 这样的 IP 知识产权限制,不仅在物联网 IC 领域非常受欢迎,最近有媒体报道,基于 RISC-V 指令集的“香山”芯片( 14nm 工艺),也已经可以支持运行 Linux 。上手的这块 ESP8266 开发板型号是 ESP-12F ,集成了一个沁恒 WCH 的 CH340G ( USB 转串口)芯片,支持 5V 电源电压和 3.3V 电源电压供电。乐鑫官方推荐的应用场景包括:附件:在沁恒 WCH 官网下载 的驱动程序( Windows 、Linux 、Mac 都支持),安装完成后,把开发板接入电脑的 USB 口,这时在系统的设备管理中心,就可以看到多了一个串口设备(比如显示 COM4 )。从 MicroPython 官网下载 ,当前版本是:esp8266-20220117-v1.18.bin然后用 MicroPython 官方提供的烧录工具 esptool ,或者在乐鑫下载 flash download tool 工具,把 MicroPython 固件烧入 ESP8266 开发板。这里用的是 Download Tool ,开发板上电后点击 START ,等待几秒钟就烧录完成了。打开 Terminal 终端(比如 PuTTY or Xshell ),选择开发板对应的串口,就可以进入 MicroPython 开发环境了。ESP8266 支持 WiFi 的 AP/STA/AP+STA 工作模式,简单说就是既可以作为接入设备,也可以作为被连接设备(类似于手机开 WiFi 热点)。这里把开发板作为终端设备,填写办公室或家里 WiFi 的 “AP_name”, “password” 即可接入网络。(建议把 WiFi 的连接程序写到 文件中,以后每次开发板上电就可以自动连上 WiFi 啦)。现在,完整的 MicroPython 开发环境就准备好了。只需要在 MCU 开发版的设备根目录下,创建 文件,就可以开发一个 MicroPython 的 App 。开发板上电、或重启(按键 RST )时,会自动执行 程序。运行结果:当然,不能指望在 ESP8266 上运行 Web 图形浏览器啦。由于这块板子上只有一颗 LED 灯,只能简单点亮闪一闪,想要实现 Yeelight 那种彩光灯带的效果,建议去买 WS2812B 灯带条,插在 ESP8266 板子上,60 颗灯做出来的效果就酷炫多了。这块显示屏是 I2C 接口,有四个引脚,GND 接地、VCC 供电、SCL 、SDA 分别接 GPIO 数据引脚 D4 、D3 即可。电源可以用 USB 线供电,或者用锂电池供电,这里是一块普通充电宝直接供电。物联网设备的一个重要功能,就是通过 ADC 传感器,将各种模拟信号转换成数字信号,然后传给本地设备或云端网络进行计算、数据处理。温湿度传感器就是比较常见的 ADC 模块,用来监控环境温度、湿度。DHT22 和 DHT11 都是常用的温湿度传感器,这里选用的是 DHT22 ,比 DHT11 测量精度更准确。DHT22 是单总线通信,除了正负引脚分别接 3V 和 G 以外,中间那根数据线接在开发板的 D1 或 D2 引脚上都可以。DHT22 温度测量范围:-40~80℃,温度测量精度:±0.5℃,湿度测量范围:0~100%RH ,湿度测量精度:±2%RH 。 是一个类似 Flask 的 Python & MicroPython Web 框架,可以在低性能的单片机上运行,为开发板提供 Web Server 服务。这样,就可以把 ESP8266 开发板作为一个 Web 服务器, 访问本机 IP 就可以打开网站了。通过 micropython.mem_info() 可以查看开发板的内存信息,系统可用内存不到 40K ( CPU 是 80MHz/160MHz ),这个配置显然是跑不动大型 Web 网站的。物联网设备进行远程连接和控制,通常都会使用 MQTT 协议,可以自己搭建 MQTT Broker 服务器,也可以使用云服务。这里使用 EMQ X Cloud 的 MQTT 消息服务进行连接,打开 登录 /注册账号,创建实例之后,在 MQTT 项目控制台就可以看到连接地址( server )和端口( port ),添加一个认证用户名 /密码(这里设为 admin/password )。将应用程序写入 ESP8266 开发板,然后给开发板上电或按下 RST 按钮重启,打开 MQTT 远端控制台,监控台显示新增加了一个已连接设备 cid_esp8266 ,开发板入网就完成了。现在打开 ESP8266 设备终端,以及 MQTT 远端,查看上行、下发的实时消息。设备联网后,就可以通过手机应用 App 或浏览器网页查看设备信息,也可以从远程操作终端设备。如果对操作时效要求不高的话,也可以采用 http 协议,通过轮询的方式实现 pub/sub 模式,在外网远程管理终端设备。还有很多玩家喜欢的创客项目,比如智能机器人、AI 人像 /物品识别 等应用,欢迎有兴趣的朋友一起交流学习。相比 C/C++ 程序,MicroPython 在运行速度方面处于劣势,如果用在飞行器、自动驾驶等高速设备上,程序运行的速度微秒必争,但对于大多数静止、或低速运动的设备,几毫秒、微秒级的性能差距完全可以忽略,在编程方面 MicroPython 开发效率就具有较大的优势,REPL 也为调试代码带来很多便捷性。目前,大多数 Arduino 能做的应用,基本上 MicroPython 都能做,Arduino 生态更成熟,MicroPython 简单易上手。不公开
没有回复内容