在本文中,将会介绍如何使用Raspberry Pi Pico W和MicroPython,并用Thonny IDE的平台来撰写程序。
Raspberry Pi Pico W是由Raspberry Pi基金会出品的微控制器开发板。它配备了一个RP2040微控制器,有264KB的内部RAM,并且支持MicroPython程序语言,这让我们可以更方便地开发物联网应用。
使用上和Raspberry Pi Pico没有多大差别,只是Raspberry Pi Pico W 还支持Wi-Fi 802.11n无线网络和蓝牙,更多Raspberry Pi Pico相关介绍连结如下:
Raspberry Pi Pico family
https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html
Raspberry Pi Pico介绍(含使用Arduino IDE和扩充板)
https://cavedu.gitbook.io/cavedu/raspberry_pi_pico_info
MicroPython是一种针对微控制器和受限环境设计的Python 3 程序语言编译程序和执行环境。这种程序语言实现了Python 3的大部分语法和特性,并对于开发板所需的低功耗和实时响应有进一步优化。MicroPython提供了丰富的API,可以直接控制微控制器的GPIO、I2C、SPI等各种硬件资源。
Thonny是一个专为Python初学者设计的集成开发环境(IDE)。它的介界面简单,功能强大,对于学习Python语言非常有帮助。而且,Thonny IDE 也支持 MicroPython,我们可以直接在Thonny IDE中编写MicroPython 程序,并上传到Raspberry Pi Pico W上执行。
请由 Thonny 官方网站下载 Thonny。
https://thonny.org/
本次项目分享如何透过Thonny IDE来撰写MicroPython程序,并使用PMS5003粉尘传感器取得数值和经由Raspberry Pi Pico W的Wi-Fi功能取得目前台湾时间,并显示在OLED中。
以下介绍Raspberry Pi Pico W、Raspberry Pi Pico W扩充板、OLED、PMS5003接线图。
Raspberry Pi Pico与扩充板接法(扩充板可兼容于Raspberry Pi Pico W)
https://cavedu.gitbook.io/cavedu/raspberry_pi_pico_info/pico_breakout
Raspberry Pi Pico W扩充板与OLED接线图
Raspberry Pi Pico W扩充板与PMS5003接线图
接下来使用 Thonny IDE 来编写程序,请先下载 Raspberry Pi Pico W 的 uf2 韧体档,除非有更新版本的韧体,否则更新只要一次即可。
https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
如何上传Raspberry Pi Pico W的uf2檔
按住 Raspberry Pi Pico W 的 BOOTSET 按钮时,插上USB连接到计算机。
Raspberry Pi Pico W 会被计算机辨识为一个磁盘,将 uf2 韧体档拖放到其中就会自动更新韧体。
Raspberry Pi Pico W连接Thonny IDE
●将Thonny IDE下载至计算机,并解压缩后开启,请选择执行>设定直译器
●选Micro Python (RP2040)
●端口选择USB序列装置(COM X)
[注] COM号要记住,后续上传程序需要正确指定 COM 号,概念如同 Aduino IDE
●确认是否抓到 Raspberry Pi Pico W
检查 Thonny IDE 下方的互动环境(Shell),如果没有红字错误讯息即可上传程序,这时候还没写,继续看下去吧。
导入OLED函式库至 Raspberry Pi Pico W
本项目需要透过 OLED 显示模块来显示数值,故需要先导入OLED 函式库
1. 下载 OLED 函式库,档名ssd1306.py到您的计算机
https://www.dropbox.com/scl/fo/fxb6eb7qn8wuvc2yaa63h/h?dl=0&rlkey=n0yir8ca5cuu5hxcsolggxd59
2. 在 Thonny IDE 中安装套件
我们可由 Thonny IDE 呼叫系统命令行来安装 python 套件,请由工具–> 开启系统命令行
开启系统命令行,如下图
3. 安装 adafruit-ampy 套件
为了顺利执行程序,我们需要安装 adafruit-ampy 套件,用于透过串行端口与 CircuitPython 或 MicroPython 开发板互动,
https://pypi.org/project/adafruit-ampy/
安装方式就是一般的 pip 指令,相当简单:
pip install adafruit-ampy
4. 导入OLED函式库到Raspberry Pi Pico W
cd module_library
ampy --port COMX put ssd1306.py
[注]请注意,并不是开启下方的窗口,若出现下方窗口,则要再按一次开启系统命令行。
5. 如何查看已导入的函式库
在 Thonny IDE 中,点选检视 -> 档案,可以查看Raspberry Pi Pico W中汇入的档案
确认已导入先前所操作的档案
执行程序
本专题有两个程序:
在 OLED 显示时间(OLED_wifitime.py)
import machine
import utime
import ssd1306
from time import sleep
import network
import ntptime
import urequests
i2c = machine.SoftI2C(scl=machine.Pin(15), sda=machine.Pin(4))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# 初始化 UART
uart = machine.UART(0, baudrate=9600, tx=machine.Pin(0), rx=machine.Pin(1), timeout=1000)
uart.init(9600, bits=8, parity=None, stop=1)
# 初始化WiFi
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
wifi_ssid = "XXXXX"
wifi_password = "XXXXXXX"
sta_if.connect(wifi_ssid, wifi_password)
# 显示WiFi连接状态
oled.fill(0)
oled.text('WiFi:', 0, 0)
if sta_if.isconnected():
oled.text('connected', 40, 0)
else:
oled.text('connceting', 40, 0)
oled.show()
#设定时区
TIME_ZONE = 8
# 取得NTP时间
#ntptime.settime()
for i in range(5):
try:
ntptime.settime()
break
except OSError:
print('Error connecting to NTP server, retrying...')
utime.sleep(5)
else:
print('Could not connect to NTP server after 5 retries.')
# 等待一段时间
utime.sleep(3)
while True:
t = utime.localtime(utime.time() + TIME_ZONE * 3600)
oled.fill(0)
oled.text(str("%d/%02d/%02d" % (t[0], t[1], t[2])), 0, 0)
oled.text(str("%02d:%02d:%02d" % (t[3], t[4], t[5])), 0, 16)
oled.show()
utime.sleep(1)
在 OLED 显示 PMS5003 粉尘传感器数值(PMS5003_OLED.py)
import machine
import utime
import ssd1306
from time import sleep
i2c = machine.SoftI2C(scl=machine.Pin(15), sda=machine.Pin(4))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# 初始化 UART
uart = machine.UART(0, baudrate=9600, tx=machine.Pin(0), rx=machine.Pin(1), timeout=1000)
uart.init(9600, bits=8, parity=None, stop=1)
while True:
#读取 PMS5003 数据
data = bytearray(uart.read(32))
# 判断是否为正确的PMS5003 资料
if data is not None and len(data) >= 10 and data[0] == 0x42 and data[1] == 0x4d:
pm1_cf = int.from_bytes(data[4:6], 'big')
pm25_cf = int.from_bytes(data[6:8], 'big')
pm10_cf = int.from_bytes(data[8:10], 'big')
#清除 OLED
oled.fill(0)
# 显示 PMS5003 数据
oled.text("PM1.0: %d ug/m3" % pm1_cf, 0, 22)
oled.text("PM2.5: %d ug/m3" % pm25_cf, 0, 38)
oled.text("PM10 : %d ug/m3" % pm10_cf, 0, 54)
# 更新 OLED
oled.show()
utime.sleep(1)
实际展示
执行程序之后,可在 OLED 显示模块上看到相关信息,恭喜成功啰!
链接:https://mp.weixin.qq.com/s/fD5o07PrNn2SeEtz7PeO7A
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
本节我们在迭代二的基础上使用四位数码管和OLED显示屏显示相关交互信息。
本节我们在迭代一的基础上增加采集土壤湿度数据,并根据湿度数据来决定是否自动进行浇水动作。
本节我们实现一个基本能工作的手动浇水装置,即通过按下按键来闭合继发器让小水泵进行浇水。
本小节通过点亮LED和串口输出两个程序,来初步掌握ArduinoIDE、了解GPIO和串口使用、同时把开发环境与开发板的连接,上传程序的各环节跑通,
本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。
在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。
umqtt 是 MicroPython 的一个轻量级 MQTT 客户端库,使得在微控制器上使用 MQTT 协议变得简单易行。本文将介绍 umqtt 的实用方法,帮助您更好地在项目中应用这一技术。
本方案是一个基于ESP32-CAM + 物联网的图像采集方案。
ESP32-CAM与MicroPython结合可实现摄像头图像采集、视频流传输等功能,不过Micropython官方没有支持ESP32-CAM的固件,需要烧录第三方的专有固件。
相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。