用 Raspberry Pi Pico W 通过 WiFi 串流传感器数据

树莓派Pico W教程:流式传感器数据

您想过用 Raspberry Pi Pico W 串流传感器数据吗?

Raspberry Pi Pico W 的最佳用途之一是提供网页服务。这意味着,只要在 WiFi 范围内,您就可以用它来监控手机中的传感器数据。本项目将为您监控加速度数据和创建数字骰子提供一个简单的基础,当您点击 ADXL343 传感器时,数字骰子就会被激活。

连接到ADXL343的Raspberry Pi Pico W

视频

需要的零件

什么是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上

在这里从我们的Github repo下载库和文件。

你可以通过进入该链接并点击绿色的""来下载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()

main.py在你连接到Pico W的服务器时,用当前读数替换这些数值。

正如你所看到的,它用你的传感器的数据取代了AccX、AccY和AccZ。

如果传感器被敲击,那么它将把一个从1到6的随机整数打印到HTML页面的 "DiceVal "字符串中。

下一步是什么?

本教程是使用 Raspberry Pi Pico W 将传感器数据流传输到网页的一种简单方法。

事实上,这是你也可以用于其他传感器的代码。

方法仍然是一样的。你需要为你的传感器找到正确的库,然后修改main.py和index.html,以便它们能够获得传感器数据并将正确的值推送到网页上。

您还可以开展许多其他项目,例如温湿度传感器,或者使用 DHT22 或 DHT22 进行空气质量项目。 BME688或带有光敏电阻的亮度传感器。

7评论

  1. Ken Anderson 在7 月 15, 2022在7:24 上午

    当然,如果能使用HTML5的功能就更好了,这样我们就能看到HTML5是如何完成的。

  2. Terry Young 在9 月 24, 2022在6:47 下午

    数据是否可以简单地通过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

  3. Ingo 在1 月 10, 2023在9:11 下午

    他有一个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.
    如何才能做到这一点呢?

    致谢和祝福
    英戈

    • raspi berry 在2 月 4, 2023在11:51 上午

      另一个Pico可能会出现问题,并通过REST API向第二个Pico提供Werte?
      我知道你的问题是什么,但你的问题是什么呢?

      如果这个项目是一个商业项目,我们可以在咨询技术方面进行干预 🙂。

  4. Luis 在1 月 11, 2023在3:30 下午

    如何将这些数据授权给thinspeak?

  5. Eddi Baars 在3 月 18, 2023在1:02 下午

    guten Tag, I habe dasselbe Problem.Mit curl oder wget funktioniert es nicht.我想在我的Raspi4上显示Pico的信息,然后用图形显示和统计学的方法。???

  6. andrew 在7 月 19, 2023在10:31 下午

    如果从 thonny 添加 netwrk 模块,就会抱怨没有名为 socket 的模块。

发表评论