写在前面

  • 弄个树莓派就弄呗
  • 有什么好怕的
  • 来来来,只有想不到,没有做不到

Python Pico W HTTP.

2024年7月8日
https://chatgpt.com/share/c9d024e1-c279-4409-bbda-d99efdcaec25


Python Pico W HTTP.

🧑‍🦰User

1
为 Raspberry Pi Pico W 编写一个连接 WiFi 并发送 HTTP 请求的简单脚本

🤖 Assistant

要在 Raspberry Pi Pico W 上连接 Wi-Fi 并发送 HTTP 请求,你可以使用专为微控制器设计的 Micropython 环境。以下是一个简单的脚本,展示了如何连接 Wi-Fi 并使用 urequests 模块(相当于 Micropython 版的 requests 模块)发送 HTTP GET 请求。

在开始之前,请确保你的 Pico W 已配置为运行 MicroPython。以下是基本脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import network
import urequests
import time

# Set your Wi-Fi credentials
ssid = 'YOUR_WIFI_SSID'
password = 'YOUR_WIFI_PASSWORD'

# Connect to Wi-Fi
def connect_to_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.config(pm = 0xa11140) # Disable power-save mode
if not wlan.isconnected():
print('Connecting to network...')
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('Network config:', wlan.ifconfig())

# Send HTTP GET request
def send_http_request(url):
response = urequests.get(url)
print('Status Code:', response.status_code)
print('Response:', response.text)
response.close()

# Main function
def main():
connect_to_wifi(ssid, password)
time.sleep(5) # Wait for connection to stabilize
send_http_request('http://httpbin.org/get')

if __name__ == '__main__':
main()

运行脚本的步骤:

  1. 修改 Wi-Fi 凭据:YOUR_WIFI_SSIDYOUR_WIFI_PASSWORD 替换为你实际的 Wi-Fi 网络名称和密码。
  2. 更新 URL:send_http_request 函数中,将 'http://httpbin.org/get' 替换为你想发送 GET 请求的目标 URL。
  3. 上传脚本: 使用 Thonny 或其他支持 Micropython 的 IDE 将脚本上传至你的 Pico W。
  4. 执行脚本: 可以直接从 IDE 运行脚本,或者重启 Pico W 来自动执行。

确保你的 Pico W 已正确连接到计算机,并设置好运行 Micropython 所需的环境。你还需要稳定的网络连接来发送 HTTP 请求至外部 URL。

🧑‍🦰User

1
让它在引脚为高电平时发送 HTTP 请求

🤖 Assistant

要修改脚本,使得当某个数字引脚为高电平时 Pico W 自动发送 HTTP 请求,可以通过 machine 模块与 Raspberry Pi Pico W 的 GPIO 引脚交互。我们将某个 GPIO 引脚设置为输入,当检测到高电平时触发 HTTP 请求。

以下是更新后的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import network
import urequests
import time
import machine

# Set your Wi-Fi credentials
ssid = 'YOUR_WIFI_SSID'
password = 'YOUR_WIFI_PASSWORD'

# Connect to Wi-Fi
def connect_to_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.config(pm = 0xa11140) # Disable power-save mode
if not wlan.isconnected():
print('Connecting to network...')
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('Network config:', wlan.ifconfig())

# Send HTTP GET request
def send_http_request(url):
response = urequests.get(url)
print('Status Code:', response.status_code)
print('Response:', response.text)
response.close()

# Setup GPIO pin
def setup_gpio(pin_number):
pin = machine.Pin(pin_number, machine.Pin.IN, machine.Pin.PULL_DOWN)
return pin

# Monitor GPIO pin and trigger HTTP request when high
def monitor_pin_and_request(pin, url):
while True:
if pin.value() == 1: # Check if pin is high
print("Pin is high, sending HTTP request...")
send_http_request(url)
time.sleep(10) # Delay to avoid continuous requests; adjust as necessary

# Main function
def main():
connect_to_wifi(ssid, password)
pin = setup_gpio(15) # Use GPIO 15 as an example; change as needed
monitor_pin_and_request(pin, 'http://httpbin.org/get')

if __name__ == '__main__':
main()

脚本说明:

  • GPIO 引脚设置: setup_gpio 函数将指定的 GPIO 引脚设置为带下拉电阻的输入模式。默认情况下,引脚读取值为 0,施加电压时读取为 1
  • 引脚监控: monitor_pin_and_request 函数会持续监控引脚状态,一旦检测到高电平便触发 HTTP 请求。
  • 请求间隔: 为避免过度请求,在监控循环中使用 time.sleep(10) 来延迟下一次 HTTP 请求。

运行步骤:

  1. 调整 GPIO 引脚编号: 根据你的硬件设置,修改 setup_gpio(15) 中的引脚编号。
  2. 修改 Wi-Fi 设置: 更新 Wi-Fi 的 SSID 和密码。
  3. 更新 URL: 根据需求修改 monitor_pin_and_request 中的 URL。
  4. 上传并运行: 使用支持 Micropython 的 IDE 上传并运行脚本。

该设置特别适合需要外部触发(例如传感器输出或用户输入)来执行网络操作的场景。

🧑‍🦰User

1
让 LED 闪烁的脚本示例

🤖 Assistant

在 Raspberry Pi Pico W 上编写一个控制 LED 闪烁的脚本非常简单。只需将 LED 连接到 GPIO 引脚,并通过 machine 模块来控制它。以下是一个简单的示例,展示了如何让连接到 GPIO 15 的 LED 闪烁:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import machine
import time

# Setup the GPIO pin for the LED
pin = machine. Pin (15, machine. Pin. OUT)

# Function to blink an LED
def blink_led (pin, interval):
while True:
pin. Value (1) # Turn LED on
time. Sleep (interval)
pin. Value (0) # Turn LED off
time. Sleep (interval)

# Main function
def main ():
blink_led (pin, 0.5) # Blink the LED every 0.5 seconds

if __name__ == '__main__':
main ()

硬件连接说明:

  1. 连接 LED:

    • LED 的正极(较长的引脚)连接至 Pico W 的 GPIO 15
    • LED 的负极(较短的引脚)连接到一个 电阻(330Ω 至 1 kΩ),电阻的另一端连接到 Pico W 的 GND 引脚
  2. 检查连接: 确保所有连接稳固,并确认 LED 的极性连接正确。

运行脚本:

  • 上传脚本: 使用 Thonny 或其他支持 Micropython 的 IDE 将脚本上传至 Pico W。
  • 执行脚本: 可以直接从 IDE 运行脚本,或配置 Pico W 以在启动时自动执行脚本。

脚本会以半秒的间隔让 LED 闪烁。你可以通过调整 blink_led 函数中的 interval 参数来更改闪烁频率。

🧑‍🦰User

1
如何让脚本在启动时自动运行

🤖 Assistant

要确保你的 Micropython 脚本在 Raspberry Pi Pico W 启动时自动运行,只需将脚本保存为特定的文件名。以下是设置脚本自启动的步骤:

1. 准备脚本

首先确保你的脚本在手动执行时正常运行,可以使用之前提到的 LED 闪烁脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import machine
import time

# Setup the GPIO pin for the LED
pin = machine. Pin (15, machine. Pin. OUT)

# Function to blink an LED
def blink_led (pin, interval):
while True:
pin. Value (1) # Turn LED on
time. Sleep (interval)
pin. Value (0) # Turn LED off
time. Sleep (interval)

# Call the blink function
blink_led (pin, 0.5) # Blink the LED every 0.5 seconds

2. 将脚本保存为 main.py

Pico W 会在每次启动时自动执行根目录中的 main.py 脚本。以下是保存方法:

  • 使用 Thonny: 在 Thonny 或其他 IDE 中打开脚本,选择 文件 > 另存为,目标选择 Pico W 并命名为 main.py
  • 直接拖拽: 如果你的电脑可以将 Pico W 映射为存储设备(可能需要特定固件),可以将文件命名为 main.py 后直接拖拽至 Pico。

3. 重启 Pico W

将脚本保存为 main.py 后,通过断电重启或按下重置按钮来重启 Pico W。启动后,Pico W 会自动执行 main.py

4. 确认操作

Pico W 启动后,LED 应该开始自动闪烁。如果没有,请检查脚本是否有误,确保文件命名正确,检查硬件连接(如电阻值)。

其他建议

  • 调试: 如果脚本未按预期运行,可连接到 IDE 检查输出或错误日志。有时脚本在启动时可能会因为硬件或网络资源未准备就绪而出错。
  • 模块化设计: 如果你的项目较大,建议将部分代码模块化,然后在 main.py 中导入使用。这可以使 main.py 更简洁,也有助于管理复杂项目。

按照这些步骤,你的 Pico W 每次上电或重启时都会自动执行 LED 闪烁脚本。