在Raspberry Pi Pico上添加蜂窝网络
文件列表(压缩包大小 9.45M)
免费
概述
blues wireless Notecard
blues wireless Notecarrier-AL
Raspberry Pi Pico
Adafruit BME680
blues wireless Notehub.io
MicroPython
上周Raspberry Pi团队发布了他们的第一个微控制器Pico时,它拥有定制的双核M0,而且售价只有4美元。
我本周收到了Pico,这是一个令人印象深刻的小型设备,具有许多GPIO,外设以及对C和MicroPython的支持。并且由于Notecard Python库初始就支持MicroPython,CircuitPython和Python,因此我想将Notecard与之连接起来,并展示如何使用两者将蜂窝网络连接添加到Pico项目中。
在本文中,我将向你展示如何:
本项目的完整源代码,包括notecard和BME680传感器的库,位于位于notecard-pico GitHub repo,你可以在下载区下载。
首先,我需要在Pico上安装MicroPython。我最初使用的是来自Pico官方文档的UF2镜像,但很快发现,在我最初的实验中,该发行版不包含MicroPythonujson
库,并且由于Notecard会使用到JSON,而note-python库取决于JSON支持,我不得不寻找一个替代方案。
值得庆幸的是,Pimoroni团队拥有MicroPython的Pico兼容分支,其中包含ujson,因此我从他们的repo下载了最新的UF2(下载区也有) 。然后,按照官方的入门指南,当我将开发板插入USB并将UF2文件拖到计算机上的RPI-RP2大容量存储设备上时,我按住Pico上的BOOTSEL按钮,这样我就能在MicroPython上运行Pico。
即将在官方发行版中支持
ujson
和其他扩展的MicroPython模块。
为了创建Pico固件,官方文档和指南建议使用Thonny IDE ,因为我将VS Code用于Python和CircuitPython开发,所以我也将其用于本项目。我从“ VS代码扩展”选项卡安装了MicroPython扩展,创建了一个项目,并通过/dev/tty.usbmodem0000000000001
USB串行端口连接到Pico上的REPL ,感觉就像z-index:9999;
。
过去,我在ESP32上做过一些MicroPython工作,而我最喜欢的体验之一是设备上的REPL。在物理连接到微控制器的同时检查GPIO和切换引脚真是太神奇了。因此,一旦连接,我就导入了machine
库并切换了Pico板上的LED,该LED位于Pin 25。
import machine
led = machine.Pin(25, machine.Pin.OUT)
# Turn the LED on
led.value(1)
#Turn the LED off
led.value(0)
.gif)
连接到Pico时运行MicroPython代码
连接了Pico之后,就该添加Notecard了。
由于Pico没有配备Wi-Fi,蜂窝网络或蓝牙,因此我决定将其连接到Blues Wireless Notecard,以增加蜂窝网络IoT的优势。Notecard是一款支持蜂窝网络和GPS功能的设备到云数据泵,具有500 MB数据和10年的蜂窝网络服务,价格为49美元。没有激活费,也没有月租费。
Notecard是一种30 x 34毫米的小型SoM,可以通过其m.2连接器嵌入到自定义项目中。但是,Blues还提供了一系列扩展板,称为Notecarriers,其中包括用于Notecard的m.2插槽以及许多用于原型制作的功能。对于这个项目,我使用了Notecarrier-AL ,它具有板载蜂窝网络和GPS天线,一个LiPo电池端口和一个引脚排针,非常适合本项目。
在云方面,Notecard已预先配置了与Notehub.io对话,Bluehu Wireless服务可实现从设备到云的安全数据流。Notecard将数据流分配给Notehub中的项目,然后本项目将数据同步到那些项目中以路由到你的云应用程序。
Notecard可以通过串行或I2C连接到任何MCU或SBC。我为本项目选择了I2C,并使用Pico引脚图将Notecard的电源,GND,SDA和SCL引脚上的跳线连接到Pico。
Pico通过I2C连接到Notecard
我的下一步是放下硬件一分钟,打开浏览器选项卡,然后在Notehub.io创建一个新项目。这是一个非常简单的过程,blues无线开发人员门户网站包含有关创建帐户,项目等的分步说明。一个新项目获得的关键是一个名为ProductUID的标识符,该标识符用于将Notecard与Notehub.io相关联,因此我所有的数据最终都存储在正确的位置。
连接设备并准备好ProductUID之后,我准备连接到固件中的Notecard。首先,我下载了最新版本的note-python library 库,并将notecard
目录复制到了Pico上的lib
目录中。
接下来,我main.py
在Pico上添加了几行代码以导入库,配置与Notecard的I2C连接,并发送hub.set request ,该请求用于设置ProductUID并设置一些同步规则。
from machine import Pin, I2C
import notecard
productUID = "com.your_company.your_name:pi_pico"
i2c = I2C(0)
card = notecard.OpenI2C(i2c, 0, 0, debug=True)
print("Connected to Notecard...")
req = {"req": "hub.set"}
req["product"] = productUID
req["mode"] = "periodic"
req["inbound"] = 120
req["outbound"] = 60c
rsp = card.Transaction(req)
然后,我上传main.py
并更新lib
目录然后运行我的代码。自从我使用初始化Notecard库以来没出过bug,随着我的固件执行,我所有的请求和响应都将显示在终端中。
我进行了Pico和Notecard的通信,但是要使其成为一个真正的项目,我需要添加一个传感器。我选择了我的首选产品Adafruit BME680,并将其连接到Pico上的I2C。
Adafruit BME680连接到Pico
与Notecard一样,我添加了一个库,以使其更易于使用BME680。由于我使用的是MicroPython,因此该库的CircuitPython版本无法原样使用,但在进行一些轻微修改后仍可以正常工作。如果你继续学习,可以我的GitHub repo中使用adafruit_bme680.py
学习该库。
添加后,我修改了main.py
源代码以导入库,初始化传感器并每60秒获取一次温度和湿度读数。
import utime
from machine import Pin, I2C
import notecard
import adafruit_bme680
productUID = "com.your_company.your_name:pi_pico"
i2c = I2C(0)
card = notecard.OpenI2C(i2c, 0, 0, debug=True)
print("Connected to Notecard...")
bmeSensor = adafruit_bme680.BME680_I2C(i2c)
print("Connected to BME680...")
req = {"req": "hub.set"}
req["product"] = productUID
req["mode"] = "periodic"
req["inbound"] = 120
req["outbound"] = 60
rsp = card.Transaction(req)
while True:
temp = bmeSensor.temperature
humidity = bmeSensor.humidity
print("\nTemperature: %0.1f C" % temp)
print("Humidity: %0.1f %%" % humidity)
utime.sleep(60)
然后,我将所有内容加载到Pico上,并在终端上观看环境读数。
连接BME680并读取办公室中的温度和湿度后,就该将数据发送到“记录卡”(和云)了!我main.py
最后一次修改了程序,每次阅读都会发送一个note.add请求。
req = {"req": "note.add"}
req["file"] = "sensors.qo"
req["body"] = { "temp": temp, "humidity": humidity}
req = card.Transaction(req)
当从BME680获取新读数时,我还添加了几行以打开Pico LED,并在将数据发送到Notecard之后将其关闭。我的程序的完整资源如下。
import utime
from machine import Pin, I2C
import notecard
import adafruit_bme680
ledPin = 25
productUID = "com.your_company.your_name:pi_pico"
led = Pin(ledPin, Pin.OUT)
i2c = I2C(0)
card = notecard.OpenI2C(i2c, 0, 0, debug=True)
print("Connected to Notecard...")
bmeSensor = adafruit_bme680.BME680_I2C(i2c)
print("Connected to BME680...")
req = {"req": "hub.set"}
req["product"] = productUID
req["mode"] = "periodic"
req["inbound"] = 120
req["outbound"] = 60
rsp = card.Transaction(req)
while True:
# Turn on the LED to take a reading
led.value(1)
temp = bmeSensor.temperature
humidity = bmeSensor.humidity
print("\nTemperature: %0.1f C" % temp)
print("Humidity: %0.1f %%" % humidity)
req = {"req": "note.add"}
req["file"] = "sensors.qo"
req["body"] = { "temp": temp, "humidity": humidity}
req = card.Transaction(req)
# Turn off the LED
led.value(0)
utime.sleep(60)
最后,我上传main.py
并在Pico上运行了它。
当Notecard接收到新数据(称为“记录”)时,它安全地连接到Notehub.io云服务,并将该数据发送到我的项目,我通过访问本项目的事件仪表板进行了确认。
Notehub.io仪表板中的温度和湿度读数。
Notecard是一款功能强大的小型设备,并且具有MicroPython支持,可以轻松地在Pico驱动的项目中添加低成本,免费的蜂窝网络物联网!要了解有关“Notecard”的更多信息,请访问blues.io。
所有需要的文件在下载区均可找到。
via:https://www.hackster.io/brandonsatrom/adding-cellular-to-the-raspberry-pi-pico-b8a4b6
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)