【发布时间】:2022-11-09 09:20:07
【问题描述】:
几天前,我买了一个 Raspberry Pi Pico W,我正在尝试将它连接到 AWS IoT Core。但是,我在连接到 AWS 时卡住了。
我已经完成了以下步骤:
-
在 Raspberry Pi Pico W 上安装了 Micropython,这行得通!
-
创建了一个 AWS 账户。
-
在 IoT Core 注册了一个“事物”
-
下载了相应的证书和密钥:(Certificates: AmazonRootCA1.pem, certificate.pem.crt, Keys: public.pem.key & private.pem.key)
-
创建了一个策略,它允许该策略的所有操作。在 AWS,此策略已激活并具有以下形式:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
- 将证书附加到策略。
- 将注册的事物附加到策略中。
- 将密钥和证书传输到 Raspberry Pi Pico W。
此后,我使用 Thonny 编写以下代码,尝试将树莓派与 AWS 连接起来。
import time
import network
import urequests
SSID = "XXXX"
PASSWORD = "XXXX"
print("start connecting")
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
print("Connected:", wlan.isconnected())
import sys
import machine
import argparse
from umqtt.simple import MQTTClient
clientId = 'client1'
AWS_ENDPOINT = 'XXXXX.amazonaws.com'
PORT = 8883
certfile = '/certificate.pem.crt'
with open(certfile, 'r') as f:
cert = f.read()
keyfile = '/private.pem.key'
with open(keyfile, 'r') as f:
key = f.read()
print("Key and Certificate files Loaded")
SSL_PARAMS = {'key': key, 'cert': cert, 'server_side': False}
client = MQTTClient(clientId, AWS_ENDPOINT, port=PORT, keepalive=10000, ssl=True, ssl_params=SSL_PARAMS)
print("Client created")
client.connect()
程序运行到:
客户端.connect()
并给我以下错误:
Traceback (most recent call last):
File "<stdin>", line 38, in <module>
File "/lib/umqtt/simple.py", line 61, in connect
ValueError: invalid key
(第 38 行是 client.connect() 语句)
private.pem.key 的格式为:
-----开始 RSA 私钥----- [字符块] -----结束 RSA 私钥-----
我有谁知道我做错了什么?提前感谢您的帮助!! :)
亲切的问候,本杰明
【问题讨论】:
-
它看起来像 umqtt.simple uses ussl.wrap_socket,我认为它不支持密钥/证书 - 而是通过
keyfile/certfile- 请参阅 the docs。
标签: mqtt micropython raspberry-pi-pico aws-iot-core