[英]ESP32 MicroPython SSL WebSocket
我成功地将我的 ESP32 连接到了 WebSocket 服务器。 现在我试图让它与 SSL 一起工作。 我尝试了这个简单的代码来连接到 www.google.com。 我用它来生成证书和密钥。
openssl req -newkey rsa:2048 -nodes -keyout client.key -x509 -days 365 -out client.crt
.
然后使用 adafruit-ampy 复制密钥和证书文件。 不要忘记更改您的串行端口。
ampy -p /dev/tty.SLAB_USBtoUART put client.crt
ampy -p /dev/tty.SLAB_USBtoUART put client.key
这是ESP32上的代码
import ussl
import usocket
import networking
KEY_PATH = "client.key"
CERT_PATH = "client.crt"
HOST, PATH, PORT = "www.google.com", "/" 443
with open(KEY_PATH, 'rb') as f:
key1 = f.read()
with open(CERT_PATH, 'rb') as f:
cert1 = f.read()
s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
addr = usocket.getaddrinfo(HOST, PORT)[0][-1]
s.connect(addr)
sock = ussl.wrap_socket(s, key = key1, cert = cert1)
sock.write(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (PATH, HOST), 'utf8'))
print(sock.read(100))
我收到此错误:
mbedtls_ssl_handshake error: -7280
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 5] EIO
有没有人在 ESP32 上成功使用过 ssl socket_wrap?
编辑(23.12.2018):
我设法终于得到了一些工作,通过 HTTPS 从谷歌获取 HTML,是的。 检查上面的代码。 希望这可以帮助。 我认为 ESP32 的 MicropPython 端口已经变得越来越好,这就是它现在起作用的原因。
下一步是让 SSL WebSocket 工作......
编辑(09.06.2019):
它现在正在工作。 这个库非常适合我打算做的事情https://github.com/danni/uwebsockets
错误 -7280 翻译如下(来自:include/mbedtls/ssl.h):
#define MBEDTLS_ERR_SSL_CONN_EOF -0x7280 /**< The connection indicated an EOF. */
您遇到的问题可能是内存问题...您可以尝试添加:
import gc
gc.collect()
在您调用getaddinfo()
?
也可以尝试在s.connect()
调用后加载密钥/证书文件?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.