描述
所以你想构建一个很酷的 -AI-ML 东西,但你没有整天坐下来为你的模型制作数据样本。好吧,自动化那件事我的朋友。
我这样做是为了在 Edge Impulse 中为我的模型获取更好的数据。我将它连接到Github 存储库中的示例代码的温度传感器,但这只是一个示例,EdgeImpulse.py 模块可以在您的项目中单独使用您的传感器。
获取代码
在新目录中删除此命令:
git clone https://github.com/cameronbunce/ESP32-Edge-Impulse.git
边缘脉冲
您需要在 上创建一个Edge Impulse 帐户并为初学者克隆我的项目(或者如果您已经熟悉 Edge Impulse,可以随意创建自己的项目)。对于您自己的项目,您将获得自己的 API 密钥。从项目主页单击顶部的键。单击右侧的“添加新的 API 密钥”。给它起一个傻乎乎的名字,然后选择“Ingestion”的角色,点击“Create”并复制这个key。将此密钥粘贴到您本地的 secret_stub.py 副本中并将其另存为 secret.py,然后返回 API 密钥下方的 HMAC 密钥的 API 页面。这也包含在您制作的新秘密文件中,它用于签署您上传到 API 的文件。
硬件设置
从通用的 ESP32 开始,如果您愿意,可以使用面包板、穿孔板或定制 PCB。将 DS18B20 传感器连接到 Vcc 和 Gnd,并使用 4.7k 欧姆上拉电阻将数据连接到 ESP32 引脚 2。您可以更改它,但此处的代码中使用了 Pin 2。我们将在下面查看您可以更改的位置。
软件设置
我为最新的 Pip3 版本更新了 Python3,并下载了 esptool.py 和 adafruit-ampy。如果您没有类似的东西,您可能还需要 Thonny 或 Mu。
pip3 install esptool pip3 install adafruit-ampy
我正在使用来自https://micropython.org/download/esp32/的每晚构建的 MicroPython,因为它有一个内置的包管理器,我们将使用它。我在此使用的文件是 esp32-20221220-unstable-v1.19.1-782-g699477d12.bin 但可能有更新的文件可用。
我们首先清理电路板,我的 Mac 将我的设备称为 tty.usbserial-0001,但你的可能会有所不同。通过终端使用 `ls /dev | 检查这个 grep tty` 在连接你的开发板之前和之后。
esptool.py --chip esp32 -p /dev/tty.usbserial-0001 erase_flash
然后我们将 MicroPython 的固件写入设备。
esptool.py --chip esp32 -p /dev/tty.usbserial-0001 --baud 460800 write_flash -z 0x1000 esp32-20221220-unstable-v1.19.1-782-g699477d12.bin
现在我们需要上网。您可以将所有命令都输入到 Mu REPL 窗口中,这是一种很好的学习方式,但我们可以在这里做一件事,让我们的未来更轻松。如果您在上面开始填写您的 secret.py 文件,那么您现在要填写其余部分。否则,现在我们需要一个名为 secret.py 的文件中的 ssid 和密码部分并加载到 ESP32 上。所以制作你的 secret.py 文件并至少填写:
ssid = "MySSID" password = "Sup3r5ecr3tP4ssword"
并使用 ampy 将该文件提交给董事会
ampy -p /dev/tty.usbserial-0001 put /path/to/secret.py
现在在 Mu 中,您可以将以下内容粘贴到选项卡中,打开 REPL,然后按运行。您的 ESP32 将使用存储在秘密文件中的 SSID 和密码连接到您的家庭网络,然后它将使用该连接使用 mip(它是 pip 的 Micropython 版本)下拉 HMAC 库。HMAC 是我们将用来对上传到 Edge Impulse 的消息进行签名的库。
import network, mip, secret wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): wlan.connect(secret.ssid, secret.password) while not wlan.isconnected(): pass mip.install('hmac')
使用完整的 secret.py 文件,并将 DS18B20 传感器连接到 Pin 2,EdgeImpluse_DS18B20_example.py在 Tests and Examples 文件夹中查看。在第 16 行,我们看到以下内容。
import json, time, hmac, hashlib import ubinascii, network, ds18x20, onewire, secret import urequests as requests from machine import Pin, WDT debug = True SensorPin = 2 # a DS18B20 attached on pin 2
如果您使用了不同的引脚,您可以将 SensorPin 连接到您使用的引脚。调试消息将打印到串行接口,因此您可以观察以这种方式上传的任何问题。有了那个集合,我们将把它放在板上,但将它重命名为main.py以便板子运行。
ampy -p /dev/tty.usbserial-0001 put EdgeImpluse_DS18B20_example.py main.py
完成后(`ampy...put...` 对我来说需要大约 16 秒),您可以在 Mu 中打开 REPL 并观察出现的调试消息。一个样本是10个读数,间隔10秒,上传也需要一点时间,所以程序运行一个周期在2分钟左右。它不循环。
如果您的上传没有出现错误,并且数据显示在 Edge Impulse 中,那么您就可以开始使用存储库的主目录了。
LongRunning.py在 ESP32 上使用深度睡眠来节省电池电量,并在需要时间隔一整天读取读数。让我们看看在哪里可以找到这些时期的控件。
interval = 600000 # 10 minutes SensorPin = 2 ReadingBatch = 145 # 24 hours of readings with interval = 10 minutes being 144
SensorPin跟以前一样,就是没有debug?我们将任何重要消息写入 ESP32 上的闪存。当我们将处理器置于深度睡眠状态时,我们必须确保我们需要的任何信息都在闪存中,因此传感器读数和消息(“未找到 SSID”或来自 API 的任何非 200 响应)在写入文件之前我们去睡觉。它们巧妙地称为message.txt和values.json并且应该允许我们上传数据,即使我们在现场用完电池或拉电。
ampy -p /dev/tty.usbserial-0001 put DS18B20Reader.py ampy -p /dev/tty.usbserial-0001 put EdgeImpulse.py ampy -p /dev/tty.usbserial-0001 put LongRunning.py main.py
请注意:深度睡眠中的 ESP32 设备确实没有响应。
如果你需要中断程序来恢复它,你会想要阻止它返回到main.py ,所以将以下代码放在 Mu 或 Thonny 中并重新启动设备。按 Control-C 跳转到 REPL,然后运行:
import os os.remove("main.py")
然后您可以检查消息并查看正在发生的情况并根据需要进行更新。DevLog.md文件中提供了其他故障排除和我到目前为止的整个过程。
您现在拥有一台自动数据馈送机来构建更好的 ML 模型。发挥你的力量,成就非凡。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !