CC3200 LaunchPad开箱例程Out of Box的demos-sprinkle部分实现了网页通过POST请求向CC3200的HTTP服务器提交数据的功能
demos-appliances主要实现了通过GET请求向CC3200的HTTP获取数据功能
获取的数据包括温度数据和加速度事件
温度数据显示在Water Temp的下边,加速度转换成对应的Running或Stopped字符显示在Dryer下边
当活动板子时Dryer下边显示Running,否则显示Stopped
查看demos-appliances.html代码看jquery在页面加载后执行了com.TI.tokenPoller函数,把一些数据传了进入
查看com.TI.tokenPoller.js文件看到com.TI.tokenPoller接收传入的参数options然后做了一些处理
首先定义了一个默认参数defaults,在没有传入参数时使用默认参数
然后将invervalRunning变量设置为false
接下来会启动一个定时器,刷新时间是200ms,通过判断和修改invervalRunning实现每200ms执行一次intervalFunc函数
设置invervalRunning的目的是防止执行 intervalFunc没有请求完成又连续请求,因为invervalRunning在只有在请求完成后才会被设置成false
刷新时间对应传入参数中refreshRate的数值
intervalFunc函数使用异步ajax的方式发送请求,请求的类型是GET,请求的页面是param_demos.html对应传入参数的paramPage数值,在请求完成后会执行done()内的函数,data是请求获得的数据
如果返回的状态不是success执行outputDefault函数,outputDefault是把页面的温度值显示成reloading表示正在获取数据
如果请求数据成功则执行outputSuccess函数,把获得的数据提取出来再显示在对应的位置
valueMap是一个数组,对应传入的参数,包括paramId、outputSuccess和outputDefault函数代码
paramId为Device_Temperature和Device_Accelerometer,对应温度和加速度
再来看看ajax请求的param_demos.html页面代码
请求成功后的数据就像下边这样可以看到__SL_G_UTP被转换成了当前温度
__SL_G_UAC被转换成了加速度计算后的Running或Stopped字符串
在CC3200 Out Of Box代码里查找__SL_G_UTP 看到它被GET_token_TEMP定义
搜索GET_token_TEMP发现它在SimpleLinkHttpServerCallback函数里
SimpleLinkHttpServerCallback函数在pSlHttpServerEvent->Event==SL_NETAPP_HTTPGETTOKENVALUE_EVENT时
也就是请求类型为GET时判断pSlHttpServerEvent->EventData.httpTokenName.data是否为__SL_G_UTP
条件成立时读取温度数据,然后再将数据写回到pSlHttpServerResponse->ResponseData.token_value.data
实现了将静态页面param_demos.html中动态将__SL_G_UTP替换成当前温度的操作
原理和asp的<%=temp%>类似,http服务器在发现__SL_G开头的代码时会调用SimpleLinkHttpServerCallback函数让用户在后台处理对应的返回值
关于CC3200 GET Tokens的介绍可以在User's Guide的81页找到
温度获取完成后是获得加速度状态,当GET Token为__SL_G_UAC时执行ReadAccSensor函数
ReadAccSensor函数的功能是先读一次加速度数据,然后等待30ms后再读一次加速度数据
比较2次数据的绝对值是否超过了csAccThreshold=5,如果超过将g_ucDryerRunning设置为1,否则为0
执行完ReadAccSensor函数后判断g_ucDryerRunning是1时将__SL_G_UAC替换为Running,为0时替换为Stopped
至此Out of Box的大部分功能基本都摸清楚了,demos-security和demos-energy基本就是这2个例程和集成,都是通过POST向CC3200发送数据,通过GET向CC3200请求数据。
Viki Shi:
感谢你的分享