Мне удалось подключить 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
Кто-нибудь успешно использовал ssl socket_wrap на ESP32?
РЕДАКТИРОВАТЬ (23.12.2018):
Мне удалось наконец-то заставить что-то работать, извлекать HTML из Google через HTTPS, да. Проверьте код выше. Надеюсь это поможет. Я предполагаю, что порт MicropPython для ESP32 улучшается, и это причина, по которой это работает сейчас.
Следующий шаг - заставить работать SSL WebSocket ...
РЕДАКТИРОВАТЬ (09.06.2019):
Сейчас работает. Эта библиотека прекрасно работает для того, что я намеревался сделать https://github.com/danni/uwebsockets