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 开发软件,目前还没有时间表。软件需要编写测试,教程需要编写"。
部件
- 树莓派Pico W
- 太阳能电池板 6V
- TP4056 USB-C 充电模块
- NR18650 锂离子电池 3.6V
- BME688分线板
- 用于 18650 型电池的电池座
- 肖特基二极管
- Pico W 和 BME688 的接头
- 麵包板
更新 Raspberry Pi Pico W 的固件
Raspberry Pi Pico W 的固件仍在不断发展,因此最好使用最新的固件。例如,Pico W 的第一个公开 MicroPython UF2 就存在一些安全问题,因为网络总是开放的。
请点击此链接了解如何更新。 该链接还将向您展示快速开始广播自己的 WiFi 网络的方法。
太阳能装置
太阳能电池板应输出至少 6 伏和 150 毫安的电流。
电池应为 18650 系列锂电池,标称电压为 3.7V。
TP4056 模块将保护电池并为 Pico W 供电。
气象跟踪装置
在这个项目中,我们将使用我们的 自行设计的 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 上。
将红线焊接到正极连接处,黑线焊接到负极连接处,是一种良好的做法。
USB-C 接口旁边的引脚用于外部电源连接,比如我们的太阳能模块。
将这些引脚连接到太阳能电池板上。
另一侧的引脚用于输出功率。标有 B+ 和 B- 的引脚需要连接到电池。
我们决定使用夹子将电池座与 TP4056 连接起来,以防需要更改电路,但如果愿意,也可以将电池座直接焊接到 TP4056 上。
肖特基二极管
在 Pico W 的 VSYS 引脚上连接一个肖特基二极管。
确保二极管上的灰色圆环朝向 Pico W,另一端连接到面包板上的正极轨道。
由于我们使用 USB 和太阳能系统这两个电源输入为 Pico 供电,因此需要使用肖特基二极管。
肖特基二极管 可防止反向供电,并允许运行两种电压。点击此处了解更多。
将 TP4056 连接到面包板
将 TP4056 的正极输出连接到面包板的正极轨,肖特基二极管就位于该处。
然后,将 TP4056 的负输出连接到 Raspberry Pi Pico W 的负引脚。
运行 Raspberry Pi Pico W 气象站的代码
我们已将所有代码上传到我们的 请点击 Github repo。
如果您已按上文所述连接了组件,则无需做任何更改即可运行代码。
尽管如此,以下是您可能需要修改的地方。
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. 的信息,请点击这里、 为什么不在这里阅读我们的大型文章?
TP4056 的规格说明要求输入电压保持在 5.5V 或 6V,而 6V 的太阳能电池板可以提供 6V 的电压,在某些情况下甚至可以提供 7V 以上的电压。我对此感到困惑。您能解释一下吗?
谢谢!
我已经完成了这个项目,取得了非常好的效果,读数非常准确。但是遇到了一个问题,它只能运行大约 10 2 15 分钟,然后就停止了。我发现只有删除 json 文件才能让它恢复正常。
有没有办法阻止它存储这些数据,而只是发送数据?
不得不说,干得好,继续努力👍。
在 bme68x.py 文件中,save_data 方法不断向 Jason 文件添加行数。在某种程度上,它一定是变得太大了。您可以进行修改,在保存文件前只保留 data_list 的最后 x 行。这样文件就会足够小。
4.104 字符后,"data.json "将填满微型微型计算机的内存。
问题是:如何限制这种情况,以完成上述项目的功能?
如能提供示例/代码补充(作为更新),将不胜感激!
TiA - 再接再厉......
PS:GitHub Repo 中的相应 Issue 也已发布。
将 TP 4056 用于此类项目并不是一个有效的解决方案,请参阅:
https://www.best-microcontroller-projects.com/tp4056.html
建设性设计或许可以使用 MPTT 设置开关,如 Waveshare、
此处说明:
https://www.waveshare.com/solar-power-manager.htm
干杯
很棒的项目创意!有没有人设计了一个 3D 打印的外壳,愿意与大家分享?
你好。
感谢您提供的手册。
根据 TP4056 规格,LED 夜光红色:(待机),LED 夜光蓝色:(待机,无夜光)。
在我的例子中,当太阳能电池板置于直射光下时,TP4056 上的两个 LED 灯都亮着。这是有意为之吗?
电池是否可以用太阳能充电,并同时为 Pico 供电?