我正在尝试将我的NodeMCU ESP-12N连接到Azure IoT中心 .
我用这样的代码创建了客户端:
esp8266 = mqtt.Client(DEVICE, 240, USER, PASSWD)
调用esp8266时收到错误:connect
PANIC:调用Lua API时出现无保护错误(init.lua:127:ssl不可用)
当我以前连接我的Arduino时,使用SSL证书刷新Wi-Fi非常重要 . 但是我无法用NodeMCU做到这一点(或者更有权利说 - 不知道如何) .
我可以获得证书:
openssl s_client -showcerts -connect ArduinoDemoHub.azure-devices.net:8883
当我添加时(谢谢@MarcelStör提示,我之前尝试过net.cert.verify)
tls.cert.verify([[
-----BEGIN CERTIFICATE-----
MIIGsTCCBJmgADJKJFdWgAIQF5Koy/50vI3cQAAAAhAXjANBgkqhkiG9w0BAQsF
......
lz3ZDUcyzRgG6TRtA3SjASEUlJMt3f7xuI2nNpt8p5gy9pXuRw==
-----END CERTIFICATE-----
]])
tls.cert.verify(true)
我收到了另一个错误:
错误连接:-5
UPDATE :有another similar topic,我已经设定了时间,但仍然没有结果 .
UPDATE 2 :以下是我尝试使用的一些链接:
Use Azure IoT Hub without client libraries (MQTT)
Sending Device-to-Cloud (D2C) Messages
sankarcheppali gitHub with samples
这是官方链接Communicate with your IoT hub using the MQTT protocol,它告诉我们:
要直接使用MQTT协议,您的客户端必须通过TLS / SSL连接 . 尝试跳过此操作将因连接错误而失败 .
此链接还提供与旧代码示例不同的用户名:
{iothubhostname}/{device_id}/api-version=2016-11-14
3 回答
默认情况下,TLS / SSL在固件构建配置中为 dis . 在编译/构建固件之前,必须取消注释CLIENT_SSL_ENABLE in user_config.h .
最简单的方法是在https://nodemcu-build.com使用 Cloud 构建器(由您真正使用)并选中TLS复选框 .
此外,
net
模块中的所有TLS / SSL相关函数(使用net.cert.verify
)都是前一段时间提取到tls
模块中的 . 除非使用当前固件构建对 not 有令人信服的论据,否则我建议您尝试使用dev
分支 . 在构建器中启用"TLS/SSL support"时,将自动获得tls
模块 .更新:有关于Azure IoT中心和证书的好文章:Certificate between IoT hub and devices connection
我在Device Explorer的帮助下创建了SAS,它看起来像:
该值设置为PASSWD变量 . 已将USER变量更改为:
并设置为false tls.cert.verify
现在工作:)
您可以参考以下两个库将NodeMCU ESP-12N连接到Azure IoT中心,可以在库管理器中搜索这两个库:
AzureIoTHubMQTTClient
AzureIoTProtocol_MQTT
安装后,您可以参考样品 .