ljj3166 发表于 2018-7-7 16:19

【NXP IoT Module评测】点个云灯

<div class='showpostmsg'> 本帖最后由 ljj3166 于 2018-7-7 16:22 编辑

对不起各位看客,还是在点个灯
在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原创,如需转载或用于商业用途需征得作者同意并注明出处

</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

ljj3166 发表于 2018-7-7 16:40

灭〇回复,人人有责

goodluckone 发表于 2018-7-9 01:53

不错

随风潜入夜-彩云 发表于 2018-8-15 11:00

顶一个!!
页: [1]
查看完整版本: 【NXP IoT Module评测】点个云灯