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

连接到ADXL343的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上焊接头,以完成这个项目。

将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)。


# 设置国家以避免可能的错误
rp2.country('DE')

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# 如果你需要关闭省电模式
# wlan.config(pm = 0xa11140)

# 查看无线芯片OTP中的MAC地址
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').Decode()
print('mac = ' + mac)

# 其他要查询的东西
# print(wlan.config('channel'))
# print(wlan.config('essid'))
# print(wlan.config('txpower'))

# 为了安全起见,从不同的文件中加载登录数据
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对象。

#初始化I2C
# busio.I2C(SCL, SDA)
i2c = busio.I2C(board.GP1, board.GP0)

然后,这两条线创建了加速度计,并启用水龙头检测(用于读骰子)。

# 创建加速器对象
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)
        虽然是真的。
            line = cl_file.readline()
            如果不是line或者line == b'\r\n'。
                休息
            
        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]))
        如果被攻破。
            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 "字符串中。

下一步是什么?

本教程代表了将传感器数据流向网页的一种简单方法。

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

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

你还可以开展许多其他项目,如用DHT22或BME688做温湿度传感器项目,或用光敏电阻做亮度传感器。

1评论

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

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

发表评论