如何为ARM架构的Raspberry Pi Pico W创建嵌入式SSL证书对接GCP云函数
Raspberry Pi + GCP云函数实现LED闪烁:SSL证书与通信方案
一、SSL证书问题搞定
Raspberry Pi是ARM架构,但完全不需要专门的ARM微控制器SSL证书:
- 不管你用Raspbian还是Ubuntu Server for ARM,系统自带的
ca-certificates包已经包含Google的根CA证书,直接就能验证GCP所有服务的SSL证书,不用额外折腾。 - 设备和GCP的身份认证,用GCP服务账号的JSON密钥就行,这比搞特殊证书靠谱多了。
二、具体实现步骤(推荐用Pub/Sub,避免公网IP问题)
1. GCP端操作
- 先建个Pub/Sub主题,比如叫
led-control-topic,用来传控制命令。 - 给这个主题建个订阅,比如
led-control-sub,Pi后面要订阅这个。 - 创建云函数:触发方式选HTTP(方便你调用),函数里写逻辑——往刚才的Pub/Sub主题发消息,比如
{"command": "blink"}。 - 给Pi建个服务账号,授予
pubsub.subscriber权限,下载JSON密钥文件到你的Pi上。
2. Raspberry Pi端操作
- 装依赖:
sudo apt update && sudo apt install python3-pip python3-gpiozero -y pip3 install google-cloud-pubsub - 把下载的JSON密钥放到Pi的某个地方(比如
~/gcp-service-account.json),然后设环境变量:export GOOGLE_APPLICATION_CREDENTIALS="/home/pi/gcp-service-account.json" - 写个Python脚本(比如
led_control.py):from google.cloud import pubsub_v1 from gpiozero import LED from time import sleep import json # 选个LED引脚,比如BCM 18(对应物理引脚12) led = LED(18) # 初始化Pub/Sub订阅者 subscriber = pubsub_v1.SubscriberClient() # 替换成你的GCP项目ID和订阅名 subscription_path = subscriber.subscription_path("你的GCP项目ID", "led-control-sub") def handle_command(message): try: cmd_data = json.loads(message.data.decode("utf-8")) print(f"收到命令: {cmd_data}") if cmd_data.get("command") == "blink": # 闪烁3次 for _ in range(3): led.on() sleep(1) led.off() sleep(1) # 确认消息已处理,避免重复接收 message.ack() except Exception as e: print(f"处理命令出错: {e}") message.nack() # 启动订阅 subscriber.subscribe(subscription_path, callback=handle_command) print("等待云端命令...按Ctrl+C退出") # 保持脚本运行 while True: sleep(60) - 运行脚本:
python3 led_control.py,要后台运行就用nohup python3 led_control.py &。
3. 测试
- 调用云函数的HTTP地址,触发它发消息到Pub/Sub。
- 看Pi上的LED是不是闪了,完美。
三、备选方案(云函数直接调用Pi)
如果你非要云函数主动发命令到Pi(不推荐,因为Pi可能没有固定公网IP):
- 给Pi整个动态DNS,或者用GCP Cloud NAT把Pi放到公网能访问的地址。
- 在Pi上搭个HTTPS服务:用Flask+Let's Encrypt免费证书,写个LED控制的接口,比如
/api/blink。 - 云函数里发HTTPS请求到这个接口,带上API密钥做身份验证,避免被瞎调用。
内容的提问来源于stack exchange,提问作者M K
相关产品推荐
相关产品推荐

