Zigbee+SIM900A 通过http协议实现上传数据到云服务器
来源:互联网 发布:快手作品制作软件 编辑:程序博客网 时间:2024/06/06 08:36
本文主要讲述 Zigbee 与 SIM900A 通过HTTP协议将数据上传至云服务器上,如果需要了解Arduino和SIM900A的相关操作请看 http://blog.csdn.net/uyy203/article/details/54445725
GSM操作的操作都写在协调器上面,所以就只放出协调器的代码。这里会添加上一个专门做GSM操作的任务处理函数。
添加任务处理函数的具体步骤请看 http://blog.csdn.net/uyy203/article/details/50633465
zigbee 实现终端和协调器无线组网的主要开发步骤请看 http://blog.csdn.net/uyy203/article/details/51175759
主要使用AT命令
AT+CFUN=1选择模式为 全功能模式
AT+SAPBR=1,1打开承载,打开网络通道
AT+HTTPINIT初始化HTTP
AT+HTTPPARA="CID","1"设置承载上下文标识
AT+HTTPPARA="URL",http://120.9.9.129/xxx/update?tem=12"设置要访问的url
AT+HTTPACTION=0
激活HTTP请求,0表示Get,1表示Post,2表示head
AT+HTTPREAD=0,60
读取返回信息,从第0到第60个字节
1.在OSAL_GenericApp.c 中的osalInitTasks 函数中添加初始化函数名
void osalInitTasks( void ){ uint8 taskID = 0; tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt); osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt)); macTaskInit( taskID++ ); nwk_init( taskID++ ); Hal_Init( taskID++ );#if defined( MT_TASK ) MT_TaskInit( taskID++ );#endif APS_Init( taskID++ );#if defined ( ZIGBEE_FRAGMENTATION ) APSF_Init( taskID++ );#endif ZDApp_Init( taskID++ );#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT ) ZDNwkMgr_Init( taskID++ );#endif #if !defined (ZDO_COORDINATOR)//判断是否协调器,不是则执行,是则跳过 GenericApp_Init( taskID ); #else //协调器 GenericApp_Init( taskID++ ); GSM_Init(taskID);//GSM初始化函数 #endif}
2.OSAL_GenericApp.c 中的tasksArr[] 的数组中添加任务处理函数名
const pTaskEventHandlerFn tasksArr[] = { macEventLoop, nwk_event_loop, Hal_ProcessEvent,#if defined( MT_TASK ) MT_ProcessEvent,#endif APS_event_loop,#if defined ( ZIGBEE_FRAGMENTATION ) APSF_ProcessEvent,#endif ZDApp_event_loop,#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT ) ZDNwkMgr_event_loop,#endif #if !defined (ZDO_COORDINATOR)//判断是否协调器,不是则执行,是则跳过 GenericApp_ProcessEvent #else //协调器 GenericApp_ProcessEvent, GSM_ProcessEvent //GSM任务处理函数#endif };
3.在Coordinator.c中加入GSM 初始化事件号、GSM处理语句执行事件号、GSM任务ID、GSM执行语句的编号定义
/******GSM******/#define GSM_TIMER_OUT_EVT (1<<0) //GSM初始化事件#define GSM1_TIMER_OUT_EVT (1<<1) //GSM处理语句执行事件byte GSM_TaskID;unsigned char GSMTasknum;//自定义 GSM执行语句编号
4.定义GSM初始化函数
void GSM_Init( byte task_id )//GSM初始化{ GSM_TaskID=task_id;//保存任务号以便后面的函数使用 osal_start_timerEx( GSM_TaskID,GSM_TIMER_OUT_EVT,10000); unsigned char GSMString[150]; GSMTasknum=0;//准备执行第一句GSM命令 }
5.定义GSM任务处理函数
GSM_TIMER_OUT_EVT 的事件在系统启动后只会执行1次
GSM1_TIMER_OUT_EVT的时间在系统启动后会循环执行,在循环执行任务时,会根据GSM执行语句编号GSMTasknum 确定当前需要执行的命令语句以及需要的延时时间
UINT16 GSM_ProcessEvent( byte task_id, UINT16 events )//GSM 处理函数{ (void)task_id; // Intentionally unreferenced parameter unsigned char GSMString[150]; if ( events & SYS_EVENT_MSG ) { //没有对SYS_EVENT_MSG作任何处理 return (events ^ SYS_EVENT_MSG); } //GSM初始化命令事件 if ( events & GSM_TIMER_OUT_EVT ) { if(GSMTasknum==0){ sprintf(GSMString,"AT+CFUN=1\r\n");//选择模式为 全功能模式 HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=1;//执行下一GSM语句 osal_start_timerEx( GSM_TaskID, GSM_TIMER_OUT_EVT, 15000); return (events ^ GSM_TIMER_OUT_EVT); } if(GSMTasknum==1){ sprintf(GSMString,"AT+SAPBR=1,1\r\n");//打开承载,打开网络通道 HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=2;//执行下一GSM语句 osal_start_timerEx( GSM_TaskID, GSM_TIMER_OUT_EVT, 5000); return (events ^ GSM_TIMER_OUT_EVT); } if(GSMTasknum==2){ //初始化HTTP sprintf(GSMString,"AT+HTTPINIT\r\n"); HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=3;//执行下一GSM语句 osal_start_timerEx( GSM_TaskID, GSM1_TIMER_OUT_EVT, 500); return (events ^ GSM_TIMER_OUT_EVT); } // return unprocessed events/ return (events ^ GSM_TIMER_OUT_EVT); } //GSM处理命令事件 if(events & GSM1_TIMER_OUT_EVT){ if(GSMTasknum==3){//设置承载上下文标识,每次登陆网页前都需要进行一次,不然网页缓存会造车频繁更新的数据无法通过url传值到web后台 sprintf(GSMString,"AT+HTTPPARA=\"CID\",\"1\"\r\n"); HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=4;//执行下一GSM语句 osal_start_timerEx( GSM_TaskID, GSM1_TIMER_OUT_EVT, 500); return (events ^ GSM1_TIMER_OUT_EVT); } if(GSMTasknum==4){ //设置要访问的url,假设需要传tem字段,通过如下URL传值可以实现,当然web端要与之对应 sprintf(GSMString,"AT+HTTPPARA=\"URL\",\"http://120.9.9.129/xxx/update?tem=%d\"\r\n",(int)tem); //打开网页 使用HTTP协议 get方式请求 IP 是我的服务器地址 HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=5;//执行下一GSM语句 osal_start_timerEx( GSM_TaskID, GSM1_TIMER_OUT_EVT, 750); return (events ^ GSM1_TIMER_OUT_EVT); } if(GSMTasknum==5){ //激活HTTP请求,后面参数表示Http请求方式,参数0表示Get方式,1表示Post方式,2表示head方式。 sprintf(GSMString,"AT+HTTPACTION=0\r\n"); HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=6;//执行下一GSM语句 osal_start_timerEx( GSM_TaskID, GSM1_TIMER_OUT_EVT, 2000); return (events ^ GSM1_TIMER_OUT_EVT); } if(GSMTasknum==6){ // 读取返回信息读取数据,从第0个字节到第60个字节 sprintf(GSMString,"AT+HTTPREAD=0,60\r\n"); HalUARTWrite(0,GSMString,osal_strlen(GSMString)); GSMTasknum=4;//执行第四GSM语句 osal_start_timerEx( GSM_TaskID, GSM1_TIMER_OUT_EVT, 100); return (events ^ GSM1_TIMER_OUT_EVT); } return (events ^ GSM1_TIMER_OUT_EVT); } // Discard unknown events return 0;}
1 0
- Zigbee+SIM900A 通过http协议实现上传数据到云服务器
- Zigbee+SIM900A 通过http协议实现上传数据到云服务器
- Arduino+SIM900A 通过http协议实现上传数据到云服务器
- 使用GPRS模块SIM900A通过HTTP上传数据到云服务器的方法
- SIM900A发送数据到新浪云服务器
- Android通过HTTP协议实现上传文件数据
- 图片服务器搭建!ftp上传到图片服务器,通过http协议读取图片
- ftp图片服务器搭建!ftp上传到图片服务器,通过http协议读取图片
- http协议上传文件到指定服务器
- 通过 HTTP POST 上传文件到服务器.
- 通过 HTTP POST 上传文件到服务器.
- 通过 HTTP POST 上传文件到服务器
- Applet 通过http上传文件到服务器
- 通过Http协议实现文件上传
- 通过Http协议实现文件上传
- android通过http协议实现文件上传
- 通过HTTP协议实现文件上传
- 通过HTTP上传数据到WebService
- 每天一个linux命令:grep 命令
- iOS实现倒计时显示 时 分 秒
- css1.15
- lua 二进制和八进制字符串互转
- 每天一个linux命令:wc命令
- Zigbee+SIM900A 通过http协议实现上传数据到云服务器
- css1.16
- Error:(54, 84) 警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用;
- Spring 自定义属性编辑(CustomEditorConfigurer)和类型转换器(ConversionServiceFactoryBean)一起配置问题
- learnR_function_1
- html5学习笔记(三)
- 源码分析Android bindService与startService区别
- 基于ubuntu 16.10内核编程环境搭建
- css1.17