对不起各位看客,还是在点个灯
在AWS的云平台服务中
终端设备,比如这次的NXP IoT Module是以shadow的形式存在
个人理解,无论是单板还是终端应用,只要证书和密匙正确
都能够连接上这个shadow,完成信息的交互
因为AWS仅提供了IoT Core的服务
并未提供用户仪表之类的界面
所以要控制终端设备,还需要自己编写应用程序
鉴于NXP和AWS的物联网解决方案的核心是MQTT
加上AWS云页面访问的蜗牛速度
MQTT具体怎么实现,这里就懒得去深究了
这货的主要动作,就是订阅(Subscribe)和发布(Publish)
所以这里使用一个MQTT调试神器----------MQTT.FX
以下操作需要的参数和文件可以去这个帖子看看:
【NXP IoT Module评测】IoT开发环境搭建
点击那个小齿轮,进入连接配置界面
点击左下角“+”号,新增一个连接配置
Broker Address中填入事物影子的URL
Broker Port在代码目录lpc54018iotmodule_aws_shadow_wifi_qspi_xip\amazon-freertos\include\aws_clientcredential.h中有确定
- /*
- * Port number the MQTT broker is using.
- */
- #define clientcredentialMQTT_BROKER_PORT 8883
嗯,填上8883即可
Client ID可填可不填,如果要填的话,最好填上影子事物的名称
楼主的是NXPIoTBoard
接下来进入SSL/TLS页面
使能SSL/TTL,并选择Self signed certificates
其中CA File是安全连接AWS所需要的根证书文件,这里直接附上:
Client Certificate File是连接证书
Client Key File就是私有密匙了
分别加载上
最后勾选上PEM Formatted
连接配置就设置妥了
回到主页面,点击Connect,可以发现能够正常连接上你的shadow Thing了
注意要点击左下角的scan
推送的Topics都在这里被扫描到
连接上单板,就会发现,订阅和推送都开始工作
左下角显示出订阅和推送的Topic,右下角则是具体的payload
专门上AWS看了一下Topic
AWS IoT Core预留的格式和软件扫描到的Topic基本一致
工程代码的aws_shadow.c文件中,其实已经定义了类似的字符串
这里楼主自己定义了一个LED的topic
#define shadowTOPIC_OPERATION_LED "led"
#define shadowTOPIC_UPDATE_LED shadowTOPIC_PREFIX shadowTOPIC_OPERATION_LED
依葫芦画瓢撸了几行
-
- #define shadowLED_JSON \
- "{" \
- ""state":{" \
- ""desired":{" \
- ""LEDstate":"%s"" \
- "}" \
- "}," \
- ""clientToken": "token-%d"" \
- "}"
-
- static uint32_t prvGenerateLEDJSON( ShadowQueueData_t * const pxShadowQueueData,
- uint8_t ucBulbState )
- {
- /* Map cBulbState to strings. */
- static const char * const pLED[ 2 ] = { "0", "1" };
-
- /* Generate JSON. */
- return ( uint32_t ) snprintf( ( char * ) pxShadowQueueData->pcUpdateBuffer, shadowDemoBUFFER_LENGTH,
- shadowLED_JSON,
- pLED[ ucBulbState ],
- ( int ) xTaskGetTickCount() );
- }
- ShadowReturnCode_t SHADOW_Led( ShadowClientHandle_t xShadowClientHandle,
- ShadowOperationParams_t * const pxUpdateParams,
- TickType_t xTimeoutTicks )
- {
- ShadowOperationCallParams_t xUpdateCallParams;
-
- configASSERT( ( ( BaseType_t ) xShadowClientHandle >= 0 &&
- ( BaseType_t ) xShadowClientHandle < shadowMAX_CLIENTS ) ); /*lint !e923 Safe cast from pointer handle. */
-
- configASSERT( ( pxUpdateParams != NULL ) );
- configASSERT( ( pxUpdateParams->pcThingName != NULL ) );
- configASSERT( ( pxUpdateParams->pcData != NULL ) );
- configASSERT( ( pxUpdateParams->xQoS == eMQTTQoS0 ||
- pxUpdateParams->xQoS == eMQTTQoS1 ) );
-
- xUpdateCallParams.xShadowClientID = ( BaseType_t ) xShadowClientHandle; /*lint !e923 Safe cast from pointer handle. */
- xUpdateCallParams.xOperationName = eShadowOperationUpdate;
-
- xUpdateCallParams.pcOperationName = shadowTOPIC_OPERATION_UPDATE;
-
- xUpdateCallParams.pcOperationTopic = shadowTOPIC_UPDATE_LED;
-
- xUpdateCallParams.pcPublishMessage = pxUpdateParams->pcData;
- xUpdateCallParams.ulPublishMessageLength = pxUpdateParams->ulDataLength;
- xUpdateCallParams.pxOperationParams = ( ShadowOperationParams_t * ) pxUpdateParams;
- xUpdateCallParams.xTimeoutTicks = xTimeoutTicks;
-
- return prvShadowOperation( &xUpdateCallParams );
- }
-
再爬虫一下
可以发现,软件已经能抓取到新定义的LED这个Topic了
json的内容也都能正常识别
接下来点灯的工作就是配置配置外设
操作操作字符串
然后拉高拉低IO口了
这里就不啰嗦了
处理好单板的代码
接下来需要在AWS云上配置出站入站的Policy
需要新建一个Policy,并与证书进行绑定
新建的策略---NXPLedPolicy:
标红的地方需要填上策略ARN标识
也就是下图标红的地方
注意,上面的策略可能有点和单板的topic对不上标,正确的被楼主一不小心删掉了
不过过程和需要填写的东西大同小异
这里懒得再去折腾了
然后在安全--证书--附加策略中把NXPLedPolicy这个策略绑定就ok了
|
|
折腾完上面的操作,大汗淋漓......
在软件的Pulish页面上操作操作
直接上个动图
好了,灯点起来了......
还有个底板的外设没造
没劲去折腾了....
谁收?
此内容由EEWORLD论坛网友ljj3166原创,如需转载或用于商业用途需征得作者同意并注明出处
本帖最后由 ljj3166 于 2018-7-7 16:22 编辑