用 Raspberry Pi Pico W 通过 WiFi 串流传感器数据
您想过用 Raspberry Pi Pico W 串流传感器数据吗?
Raspberry Pi Pico W 的最佳用途之一是提供网页服务。这意味着,只要在 WiFi 范围内,您就可以用它来监控手机中的传感器数据。本项目将为您监控加速度数据和创建数字骰子提供一个简单的基础,当您点击 ADXL343 传感器时,数字骰子就会被激活。
视频
需要的零件
什么是ADXL343?
Analog Devices的ADXL343是其前辈ADXL345的后续产品。
该传感器可以测量三个轴,有四个灵敏度设置,+-2g、+-4g、+-8g或+-16g。较低的范围为慢速运动提供更多的分辨率,较高的范围适合高速跟踪。
ADXL343也有一个CircuitPython库,我们可以在MicroPython中使用,这使我们更容易上手。
您需要将针座焊接到 ADXL343 和 Pico W 上,以便使用 Pico W 传输传感器数据流。
将ADXL343连接到Pico W上
有四个引脚需要连接到Raspberry Pi。
连接 VIN 钉子到一个 3.3V输出 在你的Raspberry Pi Pico W上。
连接 屏蔽 到你的Pico W上的一个接地引脚。
连接 SDA 销往 GPIO0;
连接 卫星通讯 销往 GPIO1.
为Raspberry Pi Pico W刷新MicroPython固件
首先,你需要将MicroPython固件闪存到Pico W上,如果你还没有的话。
然后,按住BOOTSEL按钮,把你的Pico插到电脑上。你应该看到一个新的驱动器。把你下载的.UF2文件复制到该驱动器上。
为Raspberry Pi Pico W设置Thonny
打开Thonny。如果你还没有下载它。 在这里得到它。
将解释器设置为 MicroPython (Raspberry Pi Pico) 在Thonny IDE窗口的左下方。
将图书馆复制到Pico W上
你可以通过进入该链接并点击绿色的""来下载ZIP文件。编码"按钮,并点击 下载ZIP.
下载后,将其解压到你会记得的地方。
然后,在你的Thonny IDE中,点击 查看 > 文件 来查看你的文件系统和Pico W的文件系统。
浏览解压后的文件,进入文件夹 MicroPython > II Pico W传感器服务器。 通过右键点击每个项目并点击 "上传到/",将所有内容复制到你的Pico W上。
修改代码
为了让Raspberry Pi Pico连接到你的WiFi网络,你将需要打开 secrets.py 并修改 侧面 和 pw的值。在前者中输入你的网络的SSID(名称),在后者中输入密码。保存该文件。
ǞǞǞ index.html 是将被提供的网页。这一行"<p>X AccX | Y AccY | Z AccZ</p>"和 <p>结果 DiceVal</p> 在项目运行时,将用传感器数据代替。
将你的Raspberry Pi Pico连接到WiFi上
ǞǞǞ main.py 是行动发生的地方。
这些线将它连接到你的WiFi。不要忘了改变在 rp2.country 如果你的国家不是德国(DE)。
# Set country to avoid possible errors
rp2.country('DE')
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)
# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac = ' + mac)
# Other things to query
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))
# Load login data from different file for safety reasons
ssid = secrets['ssid']
pw = secrets['pw']
wlan.connect(ssid, pw)
如果WiFi连接成功,板载的LED会闪烁三次,这要感谢这几行代码。它还会打印一条信息和你的IP地址,可以在Thonny中查看。 这个IP地址对于以后访问服务器是很有用的。
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(wlan.status()):
led.on()
time.sleep(0.2)
led.off()
time.sleep(0.2)
print('Connected')
status = wlan.ifconfig()
print('ip = ' + status[0])
如果有错误,LED会根据错误代码的值闪烁。
错误的含义
- 0 = 链接关闭
- 1 = 链接加入
- 2 = 链接NoIp
- 3 = 连接起来
- -1 = 链接失败
- -2 = 链接NoNet
- -3 = 链接BadAuth
将Pico W连接到ADXL343
这一行初始化了一个I2C对象。
# Initialize I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)
然后,这两条线创建了加速度计,并启用水龙头检测(用于读骰子)。
# Create Accelerometer object
accelerometer = adafruit_adxl34x.ADXL343(i2c)
accelerometer.enable_tap_detection()
运行代码的时间
要运行代码,按Thonny中的运行按钮,也就是顶部工具栏上的绿色按钮中带有播放图标的按钮。
然后,连接到你的Raspberry Pi Pico W的IP地址。如果你打开了Thonny的外壳,你可以在那里查看它。否则,你可以登录到你的路由器,找出Pico W的IP地址。
Pico W运行一个带有套接字连接的HTTP服务器,它听从连接,在此定义。
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
当你连接到你的Pico W的IP地址时,它将触发这段代码,每秒钟用最新的数据刷新index.html。
cl, addr = s.accept()
print('Client connected from', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if not line or line == b'\r\n':
break
response = get_html('index.html')
data = accelerometer.acceleration
tapped = accelerometer.events['tap']
response = response.replace('AccX', str(data[0]))
response = response.replace('AccY', str(data[1]))
response = response.replace('AccZ', str(data[2]))
if tapped:
dice_val = str(random.randint(1,6))
response = response.replace('DiceVal', dice_val)
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
正如你所看到的,它用你的传感器的数据取代了AccX、AccY和AccZ。
如果传感器被敲击,那么它将把一个从1到6的随机整数打印到HTML页面的 "DiceVal "字符串中。
下一步是什么?
本教程是使用 Raspberry Pi Pico W 将传感器数据流传输到网页的一种简单方法。
事实上,这是你也可以用于其他传感器的代码。
方法仍然是一样的。你需要为你的传感器找到正确的库,然后修改main.py和index.html,以便它们能够获得传感器数据并将正确的值推送到网页上。
您还可以开展许多其他项目,例如温湿度传感器,或者使用 DHT22 或 DHT22 进行空气质量项目。 BME688或带有光敏电阻的亮度传感器。
当然,如果能使用HTML5的功能就更好了,这样我们就能看到HTML5是如何完成的。
数据是否可以简单地通过TCP/UDP在一个端口上以字符串的形式流出来,而不是以网页的形式,这样它就可以被另一台计算机读取(制作仪表或其他东西)?
类似于
192.168.1.24:9060
AccX, 7.923, AccY, 1.093, AccZ, -5.452
AccX, 6.423, AccY, 1.241, AccZ, -8.769
他有一个Pico W,在一个家庭中使用,并有一些信息;如何从另一个Pico W上获取这些信息,并在WLAN上使用?
在你的示例代码中是这样的,Pico W是这样的,如果他是通过HTML来实现的。在我的例子中,我使用的是这样的方式,比如说一个
"getvaluefromotherpico(192.178.2.44, variablename)" - sprich er soll immer in seiner Schleife laufen und die per WLAN angefragten Anfragen nebenher bedienen, z.B. per Interrupt.
如何才能做到这一点呢?
致谢和祝福
英戈
另一个Pico可能会出现问题,并通过REST API向第二个Pico提供Werte?
我知道你的问题是什么,但你的问题是什么呢?
如果这个项目是一个商业项目,我们可以在咨询技术方面进行干预 🙂。
如何将这些数据授权给thinspeak?
guten Tag, I habe dasselbe Problem.Mit curl oder wget funktioniert es nicht.我想在我的Raspi4上显示Pico的信息,然后用图形显示和统计学的方法。???
如果从 thonny 添加 netwrk 模块,就会抱怨没有名为 socket 的模块。