使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

当我们提及物联网(IoT, Internet of Things)开发,可能首先想到的是Arduino或是ESP8266这样的微控制器开发板。然而,Raspberry Pi的微控制器开发板——Raspberry Pi Pico W,也是一个很好的选择。

在本文中,将会介绍如何使用Raspberry Pi Pico W和MicroPython,并用Thonny IDE的平台来撰写程序。

Raspberry Pi Pico W 简介

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简介

MicroPython是一种针对微控制器和受限环境设计的Python 3 程序语言编译程序和执行环境。这种程序语言实现了Python 3的大部分语法和特性,并对于开发板所需的低功耗和实时响应有进一步优化。MicroPython提供了丰富的API,可以直接控制微控制器的GPIO、I2C、SPI等各种硬件资源。

Thonny IDE简介

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 和 MicroPython 开发物联网应用Raspberry Pi Pico W扩充板与OLED接线图使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用Raspberry Pi Pico W扩充板与PMS5003接线图

接下来使用 Thonny IDE 来编写程序,请先下载 Raspberry Pi Pico W 的 uf2 韧体档,除非有更新版本的韧体,否则更新只要一次即可。

https://www.raspberrypi.com/documentation/microcontrollers/micropython.html

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

如何上传Raspberry Pi Pico W的uf2檔

按住 Raspberry Pi Pico W 的 BOOTSET 按钮时,插上USB连接到计算机。

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

Raspberry Pi Pico W 会被计算机辨识为一个磁盘,将 uf2 韧体档拖放到其中就会自动更新韧体。

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

Raspberry Pi Pico W连接Thonny IDE

●将Thonny IDE下载至计算机,并解压缩后开启,请选择执行>设定直译器

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

●选Micro Python (RP2040)

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

●端口选择USB序列装置(COM X)

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

[注] COM号要记住,后续上传程序需要正确指定 COM 号,概念如同 Aduino IDE

●确认是否抓到 Raspberry Pi Pico W

检查 Thonny IDE 下方的互动环境(Shell),如果没有红字错误讯息即可上传程序,这时候还没写,继续看下去吧。

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

导入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 套件,请由工具–> 开启系统命令行

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

开启系统命令行,如下图

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

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

[注]请注意,并不是开启下方的窗口,若出现下方窗口,则要再按一次开启系统命令行。

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

5. 如何查看已导入的函式库

在 Thonny IDE 中,点选检视 -> 档案,可以查看Raspberry Pi Pico W中汇入的档案

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

确认已导入先前所操作的档案

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

执行程序

本专题有两个程序:

在 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 显示模块上看到相关信息,恭喜成功啰!

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

使用 Raspberry Pi Pico W 和 MicroPython 开发物联网应用

链接:https://mp.weixin.qq.com/s/fD5o07PrNn2SeEtz7PeO7A

- 本文内容来自网络,如有侵权,请联系本站处理。

2023-10   阅读(209)   评论(0)
 标签: 创客 Pico MicroPython 物联网

涨知识
中断

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

评论:
相关文章
物联网项目开发实战-第3章-自动浇花项目迭代3

本节我们在迭代二的基础上使用四位数码管和OLED显示屏显示相关交互信息。


物联网项目开发实战-第3章-自动浇花项目迭代2

本节我们在迭代一的基础上增加采集土壤湿度数据,并根据湿度数据来决定是否自动进行浇水动作。


物联网项目开发实战-第3章-自动浇花项目迭代1

本节我们实现一个基本能工作的手动浇水装置,即通过按下按键来闭合继发器让小水泵进行浇水。


物联网项目开发实战-第2章-开发环境

本小节通过点亮LED和串口输出两个程序,来初步掌握ArduinoIDE、了解GPIO和串口使用、同时把开发环境与开发板的连接,上传程序的各环节跑通,


适合学习物联网的几款盒子

本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。


ESP32 MicroPython存储数据到闪存

在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。


MicroPython umqtt库的使用

umqtt 是 MicroPython 的一个轻量级 MQTT 客户端库,使得在微控制器上使用 MQTT 协议变得简单易行。本文将介绍 umqtt 的实用方法,帮助您更好地在项目中应用这一技术。


小鹏物联网 MicroPython 图像采集方案

本方案是一个基于ESP32-CAM + 物联网的图像采集方案。


esp32cam开发板烧录micropython固件

‌ESP32-CAM与MicroPython结合可实现摄像头图像采集、视频流传输等功能,不过Micropython官方没有支持ESP32-CAM的固件,需要烧录第三方的专有固件。


小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。