Raspberry Pi Pico W(太阳能供电)远程气象站

Raspberry Pi Pico W 软体气象站

Raspberry Pi Pico W 的一个非常特别的功能是 SoftAP 功能。

SoftAP 是软件支持的接入点的缩写,可让您通过 Raspberry Pi Pico W 直接广播 WiFi 网络。

这就是我们选择开展这个太阳能项目的原因。

太阳能发电项目如何与 SoftAP 相结合

问题就在这里。

如果您想创建一个离家测量数据的项目,您会发现无法通过无线方式获取数据。

在这种情况下,您还不如使用普通的 Pico,因为您无法使用它的无线功能。

太阳能发电项目可能是其中之一,因为你需要把它放在阳光普照的地方,而这通常是在室外。

这就是 SoftAP 的用武之地。比方说,您想知道外面的天气情况。您可以连接到 Raspberry Pi Pico W 正在广播的 SoftAP,然后登录显示数据的 IP 地址。

这几乎是我们如何利用 Raspberry Pi Pico W 优势的最佳方案。

我的意思是,可以购买 LTE 附加组件或长距离无线附加组件,但那样就不是真正的 Pico W 教程了,因为你可以在普通 Pico 上使用这些组件。

Raspberry Pi Pico W 的蓝牙功能如何?

如果能使用蓝牙就更好了,但截至本教程发布之日,Raspberry Pi Pico W 还未启用蓝牙功能。

2022 年 7 月 1 日,Raspberry Pi 工程师兼论坛版主 jamesh 说:"我们已经开始为 BT 开发软件,目前还没有时间表。软件需要编写测试,教程需要编写"。

部件

完整的项目,太阳能电池板位于面包板底部

更新 Raspberry Pi Pico W 的固件

Raspberry Pi Pico W 的固件仍在不断发展,因此最好使用最新的固件。例如,Pico W 的第一个公开 MicroPython UF2 就存在一些安全问题,因为网络总是开放的。

请点击此链接了解如何更新。 该链接还将向您展示快速开始广播自己的 WiFi 网络的方法。

太阳能装置

为 Pico W 供电的太阳能电池板至少应输出 6V 和 150mA 电流。

太阳能电池板应输出至少 6 伏和 150 毫安的电流。

电池应为 18650 系列锂电池,标称电压为 3.7V。

TP4056 USB-C 充电模块

TP4056 模块将保护电池并为 Pico W 供电。

气象跟踪装置

BME688 分线板,由 pi3g 制作。

在这个项目中,我们将使用我们的 自行设计的 BME688 分线电路板。

您可以使用任何气象传感器,如 DHT11 或 DHT22,但本文的代码和接线实际上是针对 BME688 的。

接线

将 Pico W 和 BME688 放到面包板上。

您需要连接四个引脚:BME688 上的 3.3V、GND、SCL 和 SDA。

下面是我们使用的方法:

皮克 W's GP1 连接至 卫星通讯;

GP0 连接至 SDA;

屏蔽 连接至 屏蔽;

这三个引脚应在同一直线上,紧靠微型 USB 插槽。

3V3 连接至 3V3位于电路板的另一侧。

TP4056 USB-C 充电模块

您需要将导线焊接到 TP4056 上。

将红线焊接到正极连接处,黑线焊接到负极连接处,是一种良好的做法。

Raspberry Pi Pico W 太阳能电池板项目

USB-C 接口旁边的引脚用于外部电源连接,比如我们的太阳能模块。

将这些引脚连接到太阳能电池板上。

另一侧的引脚用于输出功率。标有 B+ 和 B- 的引脚需要连接到电池。

我们决定使用夹子将电池座与 TP4056 连接起来,以防需要更改电路,但如果愿意,也可以将电池座直接焊接到 TP4056 上。

肖特基二极管

在 Pico W 的 VSYS 引脚上连接一个肖特基二极管。

确保二极管上的灰色圆环朝向 Pico W,另一端连接到面包板上的正极轨道。

由于我们使用 USB 和太阳能系统这两个电源输入为 Pico 供电,因此需要使用肖特基二极管。

肖特基二极管 可防止反向供电,并允许运行两种电压。点击此处了解更多。

将 TP4056 连接到面包板

太阳能供电的 Raspberry Pi Pico W 已完成!
太阳能供电的 Raspberry Pi Pico W 已完成!

将 TP4056 的正极输出连接到面包板的正极轨,肖特基二极管就位于该处。

然后,将 TP4056 的负输出连接到 Raspberry Pi Pico W 的负引脚。

运行 Raspberry Pi Pico W 气象站的代码

我们已将所有代码上传到我们的 请点击 Github repo。

这里是 如何将文件上传到 Pico W 的指南。

如果您已按上文所述连接了组件,则无需做任何更改即可运行代码。

尽管如此,以下是您可能需要修改的地方。

bme68x.py

该脚本可修改 BME688 的输出。

要获得准确的温度和海拔读数,您需要修改这些以粗体标出的行:

 # change this to match the location's pressure (hPa) at sea level
        # bme68x.sea_level_pressure = 1013.25
       <strong> self.bme68x.sea_level_pressure = 1013</strong>

        # You will usually have to add an offset to account for the temperature of
        # the sensor. This is usually around 5 degrees but varies by use. Use a
        # separate temperature sensor to calibrate this one.
        <strong>self.temperature_offset = -9</strong>

main.py

main.py 文件会启动一个接入点,同时运行一个服务器,向所有连接者发送 HTML 文件。

在 HTML 文件中,您可以看到 BME688 的读数。

收到连接(通过套接字)后,Pico W 将发送 index.html 文件,但在发送之前,它将通过该代码块用从 BME688 获取的数据替换一些字符串:

data = {
    'T': 0,
    'P': 0,
    'A': 0,
    'H': 0,
    'G': 0,
    }
...
def get_html(html_name):
    with open(html_name, 'r') as file:
        html = file.read()
        
    return html
...
sensor = bme68x.BME68X()
... 
response = get_html('index.html')
    data = sensor.save_data('data.json')
    blink_onboard_led(1, 0.2)
    response = response.replace('id_temp', str(data['T']))
    response = response.replace('id_pres', str(data['P']))
    response = response.replace('id_alti', str(data['A']))
    response = response.replace('id_humi', str(data['H']))
    response = response.replace('id_gas', str(data['G']))
    print_data(data)
    conn.send(response)
    conn.close()

如您所见,该行写道 data = sensor.save_data('data.json') 是我们获取传感器数据的地方,然后代码会用正确的温度、压力、海拔高度、湿度和气体电导率读数修改 HTML 文件。

每三秒钟自动刷新一次。

以下是在 Raspberry Pi Pico W 上广播接入点所需的代码块:


essid = 'Pico-W-Weather-Station'
password = '#FreeThePicoW'

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=essid, password=password)

while ap.active() == False:
    pass

print('Connection successfull')
print(ap.ifconfig())

# Create sensor object
sensor = bme68x.BME68X()

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(3)
blink_onboard_led(3, 0.2)

注意:如果您使用的是原版固件,则应进行更新,否则将无法重命名 SSID 或实现无线安全。我们在 2022 年 7 月 15 日的夜间版本上进行了测试,终于成功了。 还有一些其他的怪癖和错误,请务必阅读我们的攻略。

点击这里。 广播一个WiFi网络(SoftAP接入点)。

连接 Pico W 接入点

AP 广播成功后,Pico W 将根据提供的代码闪烁三次。

连接到您的 AP,其名称应为 Pico-Weather-Station.

输入密码 #FreeThePicoW

使用 IP 地址连接 Pico。如果从 Thonny 运行,则会在 shell 中看到 IP 地址。

否则,您可以尝试 192.168.4.1 因为这通常是 Pico W 的 IP 地址,你应该能看到右边的截图:

你完了

在本项目中,您将学习如何利用 Raspberry Pi Pico W 的 SoftAP 功能广播网络。您还学会了如何将太阳能电池板和电池连接到 Pico W。

如果您想了解更多有关 Pico W.W. 的信息,请点击这里、 为什么不在这里阅读我们的大型文章?

点击这里。 您需要了解的有关 Raspberry Pi Pico W 的所有信息

7评论

  1. Carlos 在7 月 25, 2022在8:34 上午

    TP4056 的规格说明要求输入电压保持在 5.5V 或 6V,而 6V 的太阳能电池板可以提供 6V 的电压,在某些情况下甚至可以提供 7V 以上的电压。我对此感到困惑。您能解释一下吗?

    谢谢!

  2. Bigalbo 在7 月 28, 2022在8:12 上午

    我已经完成了这个项目,取得了非常好的效果,读数非常准确。但是遇到了一个问题,它只能运行大约 10 2 15 分钟,然后就停止了。我发现只有删除 json 文件才能让它恢复正常。
    有没有办法阻止它存储这些数据,而只是发送数据?
    不得不说,干得好,继续努力👍。

    • Nabla 在8 月 8, 2022在1:14 下午

      在 bme68x.py 文件中,save_data 方法不断向 Jason 文件添加行数。在某种程度上,它一定是变得太大了。您可以进行修改,在保存文件前只保留 data_list 的最后 x 行。这样文件就会足够小。

  3. Thomas 在9 月 6, 2022在11:31 上午

    4.104 字符后,"data.json "将填满微型微型计算机的内存。

    问题是:如何限制这种情况,以完成上述项目的功能?
    如能提供示例/代码补充(作为更新),将不胜感激!

    TiA - 再接再厉......
    PS:GitHub Repo 中的相应 Issue 也已发布。

  4. BigMac 在9 月 14, 2022在6:43 下午

    将 TP 4056 用于此类项目并不是一个有效的解决方案,请参阅:
    https://www.best-microcontroller-projects.com/tp4056.html

    建设性设计或许可以使用 MPTT 设置开关,如 Waveshare、
    此处说明:
    https://www.waveshare.com/solar-power-manager.htm

    干杯

  5. Mark Beans 在7 月 9, 2023在9:01 下午

    很棒的项目创意!有没有人设计了一个 3D 打印的外壳,愿意与大家分享?

  6. Pavlo 在2 月 22, 2024在11:32 上午

    你好。
    感谢您提供的手册。
    根据 TP4056 规格,LED 夜光红色:(待机),LED 夜光蓝色:(待机,无夜光)。
    在我的例子中,当太阳能电池板置于直射光下时,TP4056 上的两个 LED 灯都亮着。这是有意为之吗?
    电池是否可以用太阳能充电,并同时为 Pico 供电?

发表评论