【测评报告 R】 - 【CC3200-LAUNCHXL 开发板测评报告】开箱例程Out of Box测试之sprinkler

Out of Box是CC3200 LaunchPad的开箱例程

通过HTTP Server让客户端通过浏览器就可以控制板子上边的LED灯、读取板子上的温度传感器、检测板子的加速度传感器状态

对应的原码在SDK安装目录下的example\out_of_box

C:\ti\CC3200SDK_1.3.0\cc3200-sdk\example\out_of_box

对应的文档为CC32xx Out of Box Application

C:\ti\CC3200SDK_1.3.0\cc3200-sdk\docs\examples\CC32xx Out of Box Application.pdf

单从CC32xx Out of Box Application文档并不能完全掌握Out of Box例程的使用

连接WIFI和打开对应的http页面还需要参考Quick Start Guide文档

C:\ti\CC3200SDK_1.3.0\cc3200-sdk\docs\CC3200-Quick_Start_Guide.pdf

上棕文档除了介绍如何使用Out of Box例程外没有对程序的原理做介绍

想了解程序的运行原理就需要开发者自己去摸索了

 

Sprinkler是Out of Box例程里的一个模块,用来通过web页面控制板子上的LED关闭或闪烁

Web页面则通过切换图片来显示喷水和停止喷水的动画用来模拟草坪的喷淋系统

左边的开关用来控制喷淋的开启和关闭状态

关开关为off时,LED灯熄灭,显示不喷水的静止图片

当开关为on时板子上的LED闪烁,图片不断在喷水和不喷水状态切换

Out of Box的功能很多,看起来有些复杂

为了弄清Sprinkler的工作原理可以先从对应的控制页面入手通过

Sprinkler的web页面源码为demos-sprinkler.html

C:\ti\CC3200SDK_1.3.0\cc3200-sdk\example\out_of_box\html\demos-sprinkler.html

打开源码看到2段js代码,下边这段代码是在左边的开关状态切换时触发

当开关触发前状态为on时通过代码com.TI.toggleLED('_OFF');将开发板的LED设置为关闭状态,变量spriklerRunning = false;

显示停止喷淋的图片

当开关触发前状态不为on时通过代码com.TI.toggleLED('_Blink');将开发板的LED状态设置为闪烁

变量spriklerRunning = true;

 

下边这段代码用来通过一个间隔为300ms的定时器来控制web页面显示的图片

当开关从off切换为on时spriklerRunning = true表示开始喷淋

如果spriklerRunning为真代码会通过切换变量imageOn的状态来控制要显示的图片

由在喷水和不喷水的状态下切换,实现喷淋效果

 

demos-sprinkler.html是通过CC3200的http server提供的,代码加载后会在客户端的浏览器运行

页面加载到浏览器后CC3200并不能通过demos-sprinkler.html来检测用户的任何操作

如果想要通过浏览器向CC3200发送指令就要通过POST或GET的方式向http server提交数据

由代码分析数据后再做处理

跟踪com.TI.toggleLED函数可以看到它由page-actions.js提供,代码如下

 

whichOne用来接收执行函数时传递的参数,关闭时为” _OFF”,开启时为” _Blink”

LEDnum一直为”1”

从代码可以看出POST的页面为No_content

键名为__SL_P_ULD

最终的params为LED1_OFF或LED1_ Blink

和抓包软件抓到的数据一致

 

 

 

知道了客户端如何发送数据后接下来看CC3200的代码是如何处理客户端提交的数据的

在Out of Box工程里搜索__SL_P_ULD能找到一条数据,在main.c中

检索POST_token变量看到它出现在main.c的SimpleLinkHttpServerCallback函数下

SimpleLinkHttpServerCallback函数通过switch (pSlHttpServerEvent->Event)来区分GET和POST请求

POST_token出现在case SL_NETAPP_HTTPPOSTTOKENVALUE_EVENT下

 

if(memcmp(ptr, POST_token, strlen((const char *)POST_token)) == 0)用来比较POST进来的数据的键名是否和POST_token相同

再拆分POST进来的与POST_token键对应的值,先是比较前3个字符是否为LED,再判断后边的是1还是2

最后判断为ON、Blink还是OFF

 

当LED为1时根据POST参数修改g_ucLEDStatus的状态为LED_ON、LED_BLINK或LED_OFF

检索g_ucLEDStatus找到OOBTask中的主循环里通过g_ucLEDStatus的状态来修改红色LED亮灭的代码

至此,Sprinkler的工作过程算是理清楚了

3 个回复