SDK 开发指南_0009
更新时间:2023-09-06 14:50:01 阅读量: 教育文库 文档下载
- sdk是什么意思推荐度:
- 相关推荐
8266wifi sdk开发指南
应用场景:
A6501WIFI模块作为AP+SERVER,手机APP通过WIFI直连模块这个AP,然后APP作为CLIENT与模块建立TCP链接,通过HTTP+Json命令控制模块的GPIO。
开发步骤详解:
1)客户代码文件目录放在哪
第一步:新建工程,首先在app目录下拷一份demo文件,然后改名为test
放在同一级目录下如图第二步:新建客户的代码文件,在\app\test\user目录下建立文件gpio_test.c如图
注:图中的demo_main.c每个工程都包含的(demo_main.c文件名称可以更改)
,该文件里面包含工程的入口函数voidairm2m_cust_main(void)
;
2)用什么编辑工具
SourceInsight3.5或Notepad++,UltraEdit等等,客户用顺手哪个就用哪个。
3)头文件如何建立
在\app\test\user\include目录下建立文件gpio_test.h
如图
4)程序入口在哪里,初始化代码在哪里写。
程序的入口是\app\test\user\demo_main.c文件的voidairm2m_cust_main(void)函数。
注:demo_main.c可以改名字,但是airm2m_cust_main(void)不可以改名字。
以本应用场景为例,我们在gpio_test.c中做一些GPIO管脚的初始化led_init(void),tcp的监听
httpserver_init(void),然后将这些函数放在airm2m_cust_main(void)中执行。
5)应用场景案例
现在我们开始编写代码:
下面是gpio_test.c文件
#include"osapi.h"
8266wifi sdk开发指南
#include"mem.h"
#include"airm2m_common_api.h"
#include"ip_addr.h"
#include"espconn.h"
#include"gpio_test.h"
#defineLED_GPIO55
#defineLED_GPIO5_Htrue
#defineLED_GPIO5_Lfalse
#defineHTTP_PORT80
boolled_status=false;//宏为GPIO5的管脚号//宏为GOIO5的管脚状态为高//宏为GOIO5的管脚状态为低//宏为HTTP_SERVER的端口号//记录led_gpio5的状态默认为false
//第一步:为了测试能有log信息方便调试,添加一个串口UART的初始化
voidICACHE_FLASH_ATTR
uart_init(void)
{
T_AIRM2M_UART_PARAMuart0_param;
uart0_param.uartConfig.baud=115200;//设置波特率
uart0_param.uartConfig.dataBits=8;//设置数据位
uart0_param.uartConfig.flowControl=AIRM2M_UART_FLOWCONTROL_NONE;//设置流控
uart0_param.uartConfig.stopBits=AIRM2M_UART_STOP_ONE;//设置停止位
uart0_param.uartConfig.parity=AIRM2M_UART_NO_PARITY;//设置校验位
uart0_param.uartEventHandle=NULL;//设置中断
airm2m_uart_open(AIRM2M_UART_0,&uart0_param);//初始化uart0,使用UART0打印log
//UART0占用PIN1(RX)和PIN2(TX),UART1只有一个TX(占用PIN16)
os_printf("uart_initok");
}
//第二步进行管脚的初始化
//假设GPIO5控制着led灯
voidICACHE_FLASH_ATTR
led_init(void)
{
T_AIRM2M_GPIO_CFGled_gpio5_param={0};
led_gpio5_param.mode=AIRM2M_GPIO_OUTPUT;//配置管脚参数设置管脚为输出
airm2m_gpio_open(LED_GPIO5,&led_gpio5_param);//设置好参数后调用该接口初始化管脚
os_printf("led_initok");
}
//第三步设置管脚状态(假设高电平灯亮,低电平灯灭)
LOCALvoidICACHE_FLASH_ATTR
led_switch(boolgpio_status)
{
8266wifi sdk开发指南
switch(gpio_status)
{
caseLED_GPIO5_H://当为true,点灯,同时打印对应的log信息
airm2m_gpio_set(LED_GPIO5,LED_GPIO5_H);
led_status=LED_GPIO5_H;
os_printf("GPIOHlenon");
break;
caseLED_GPIO5_L://当为false,关灯,同时打印对应的log信息
airm2m_gpio_set(LED_GPIO5,LED_GPIO5_L);
led_status=LED_GPIO5_L;
os_printf("GPIOLlenoff");
break;
}
}
//第四步查询led状态
LOCALboolICACHE_FLASH_ATTR
led_state(void)
{
returnled_status;
}
//第五步建立http_server的监听
/*首先由于测试app的协议为http+json格式,编写接收协议命令地址解析函数parse_url*/
//然后写http_server连接、接收、发送、重连、断开的处理函数
//由于本场景测试发送接收,断开、重连回调处理函数暂且只做打印测试
/*
parse_url函数解析HTTP+JSON命令请求类型和地址
POST/config?command=switchHTTP/1.1
Host:192.168.4.1
................下面的信息暂时不写
*/
LOCALvoidICACHE_FLASH_ATTR
parse_url(char*precv,URL_Frame*purl_frame)
{
char*str=NULL;
uint8length=0;
char*pbuffer=NULL;
char*pbufer=NULL;
//判断purl_frame和precv不存在则返回
if(purl_frame==NULL||precv==NULL){
8266wifi sdk开发指南
return;
}
//返回查找Host位置的地址
pbuffer=(char*)os_strstr(precv,"Host:");
//判断若Host存在
if(pbuffer!=NULL){
length=pbuffer-precv;
pbufer=(char*)os_zalloc(length+1);
pbuffer=pbufer;
os_memcpy(pbuffer,precv,length);//获取命令地址的长度//建立命令存放的buf
//purl_frame解析地址的结构体分别存放POSTconfigswitch
os_memset(purl_frame->pSelect,0,URLSize);
os_memset(purl_frame->pCommand,0,URLSize);
os_memset(purl_frame->pFilename,0,URLSize);
//判断是否为GET
if(os_strncmp(pbuffer,"GET",4)==0){
purl_frame->Type=GET;
pbuffer+=4;
//判断是否为post
}elseif(os_strncmp(pbuffer,"POST",5)==0){
purl_frame->Type=POST;
pbuffer+=5;
}
pbuffer++;
//查找?位置
str=(char*)os_strstr(pbuffer,"?");
//存在解析出config
if(str!=NULL){
length=str-pbuffer;
os_memcpy(purl_frame->pSelect,pbuffer,length);
str++;
pbuffer=(char*)os_strstr(str,"=");//查找=号的位置
//若存在解析出command
if(pbuffer!=NULL){
length=pbuffer-str;
os_memcpy(purl_frame->pCommand,str,length);
8266wifi sdk开发指南
pbuffer++;
str=(char*)os_strstr(pbuffer,"&");//查找&位置
if(str!=NULL){//解析出switch
length=str-pbuffer;
os_memcpy(purl_frame->pFilename,pbuffer,length);
}else{
str=(char*)os_strstr(pbuffer,"HTTP");
if(str!=NULL){
length=str-pbuffer;
os_memcpy(purl_frame->pFilename,pbuffer,length);
}
}
}
}
os_free(pbufer);
}else{
return;
}
}
/*
httpserver_recv函数为http_server的接收回调处理函数
*/
LOCALvoidICACHE_FLASH_ATTR
httpserver_recv(void*arg,char*pusrdata,unsignedshortlength)
{
structespconn*ptrespconn=arg;
URL_Frame*pURL_Frame=NULL;
char*str=NULL;
pURL_Frame=(URL_Frame*)os_zalloc(sizeof(URL_Frame));
//获取命令的地址和请求类型(POST/GET)
parse_url(pusrdata,pURL_Frame);
switch(pURL_Frame->Type)
{
caseGET://判断请求为get
os_printf("WehaveaGETrequest.\n");
//根据cmd的地址到具体位置,处理相应的功能
8266wifi sdk开发指南
if(os_strcmp(pURL_Frame->pSelect,"config")==0&&
os_strcmp(pURL_Frame->pCommand,"command")==0){
if(os_strcmp(pURL_Frame->pFilename,"gpio")==0){
if(led_state()){
//构造返回信息
uint8buf1[]="HTTP/1.0200OKContent-Length:21Server:lwIP/1.4.0Content-type:
application/jsonExpires:Fri,10Apr200814:00:00GMTPragma:no-cache{\"gpio_get\":{\"gpio\":5,\"value\":1}}";
espconn_sent(ptrespconn,buf1,sizeof(buf1));//返回信息
}else{
//构造返回信息
uint8buf2[]="HTTP/1.0200OKContent-Length:21Server:lwIP/1.4.0Content-type:
application/json\Expires:Fri,10Apr200814:00:00GMTPragma:no-cache{\"gpio_get\":{\"gpio\":5,\"value\":0}}";
espconn_sent(ptrespconn,buf2,sizeof(buf2));//返回信息
}
}
}
char*str=NULL;
break;
casePOST://判断请求为post
os_printf("WehaveaPOSTrequest.\n");
//根据cmd的地址到具体位置,处理相应的功能
if(os_strcmp(pURL_Frame->pSelect,"config")==0&&
os_strcmp(pURL_Frame->pCommand,"command")==0){
if(os_strcmp(pURL_Frame->pFilename,"gpio")==0){
str=(char*)os_strstr(pusrdata,"value");
if(str!=NULL)
{
if(os_strstr(str,"0"))
{
led_switch(LED_GPIO5_L);
}else{
led_switch(LED_GPIO5_H);
}
//构造返回信息//设置管脚5位低电平//设置管脚5位高电平
8266wifi sdk开发指南
uint8buf3[]="HTTP/1.0200OKContent-Length:0Server:lwIP/1.4.0";
espconn_sent(ptrespconn,buf3,sizeof(buf3));//返回信息}
}
}
break;
default:
break;
}
}
/*
httpserver_recon函数为http_server的重连回调处理函数
*/
LOCALICACHE_FLASH_ATTR
voidhttpserver_recon(void*arg,sint8err)
{
os_printf("httpserver_reconok");
}
/*
httpserver_discon函数为http_server的断开回调处理函数
*/
LOCALICACHE_FLASH_ATTR
voidhttpserver_discon(void*arg)
{
os_printf("httpserver_disconok");
}
/*
httpserver_sent函数为http_server的发送回调处理函数
*/
LOCALvoidICACHE_FLASH_ATTR
httpserver_sent(void*arg)
{
os_printf("httpserver_sentok");
}
/*
httpserver_listen函数为http_server的连接回调处理函数
函数中注册了接收、重连、发送、断开回调处理函数
*/
LOCALvoidICACHE_FLASH_ATTR
httpserver_listen(void*arg)
{
8266wifi sdk开发指南
structespconn*pesp_conn=arg;
espconn_regist_recvcb(pesp_conn,httpserver_recv);
espconn_regist_reconcb(pesp_conn,httpserver_recon);
espconn_regist_disconcb(pesp_conn,httpserver_discon);
espconn_regist_sentcb(pesp_conn,httpserver_sent);
}
/*
httpserver_init函数为http_server的连接回调处理函数
函数中注册了接收、重连、发送、断开回调处理函数
*/
voidICACHE_FLASH_ATTR
httpserver_init(void)
{
LOCALstructespconnesp_conn={0};
LOCALesp_tcpesptcp;
esp_conn.type=ESPCONN_TCP;//设置连接为tcp协议
esp_conn.state=ESPCONN_NONE;//设置连接状态
esp_conn.proto.tcp=&esptcp;
esp_conn.proto.tcp->local_port=HTTP_PORT;//设置连接的端口号
espconn_regist_connectcb(&esp_conn,httpserver_listen);//注册httpserver连接回调函数
espconn_accept(&esp_conn);//tcp连接侦,听连接
os_printf("httpserver_initok");
}
下面是test_gpio.h文件
#ifndef__GPIO_TEST_H
#define__GPIO_TEST_H
#defineURLSize10//设置长度为10
//改结构体保存着GET和POST的值
typedefenumProtocolType{
GET=0,
POST,
}ProtocolType;
/*
该结构体用来保存http+json协议的请求类型(POST/GET)
和保存config?comand=switch的地址信息
*/
8266wifi sdk开发指南
typedefstructURL_Frame{
enumProtocolTypeType;
charpSelect[URLSize];
charpCommand[URLSize];
charpFilename[URLSize];
}URL_Frame;
voidICACHE_FLASH_ATTRhttpserver_init(void);
voidICACHE_FLASH_ATTRled_init(void);
voidICACHE_FLASH_ATTRuart_init(void);
#endif
/*
*第六步:在此场景中我们可以将模块设置为ap模式
*/
voidICACHE_FLASH_ATTR
AP_wifi_init()
{
structsoftap_configapConifg;
structstation_config
charmacaddr[6];
wifi_set_opmode(SOFTAP_MODE);//设置为ap模式
//读取模块的ap_mac地址
wifi_get_macaddr(SOFTAP_IF,macaddr);
os_memset(config.ssid,0,sizeof(config.ssid));staConfig;structsoftap_configconfig;
//设置ap_mode的相关属性
os_sprintf(config.ssid,"GPIO_TEST_%02X%02X",macaddr[4],macaddr[5]);//设置ap_mode的ssidconfig.ssid_len=os_strlen(config.ssid);
os_memset(config.password,0,sizeof(config.password));
config.authmode=AUTH_OPEN;
config.channel=1;
config.ssid_hidden=0;
config.max_connection=4;
config.beacon_interval=100;
wifi_softap_set_config(&config);//AP设置初始化
}
8266wifi sdk开发指南
/*第八步:到此为止代码已经编好了。现在将3个接口函数
*uart_initlen_inithttpserver_initAP_wifi_init
*放到gpio_test.h中
*然后在airm2m_cust_main(void)函数中调用3个接口(且包含头文件gpio_test.h)如下面:
voidICACHE_FLASH_ATTR
airm2m_cust_main(void)
{
uart_init();
AP_wifi_init();
led_init();
httpserver_init();
}
*/这样就将新代码加入工程中了
*/
第九步:编译,烧录,测试(具体编译请参考AirM2MSDK用户手册)
编译:在\app\test\project\DEMO目录下运行./build
附:编译环境的搭配具体操作请参考AirM2MSDK
用户手册等相关文档
烧录:
使用AirM2M_ESP8266_升级工具_V1.0.8工具下载选中bin目录下面的cfg.lua文件开始下载。具体请参考AirM2MSDK用户手册。
测试:
1.打开串口工具sscom,重启一下模块,有如下log
图
2.将电脑连上模块,打开TCP&UDP测试工具,模拟手机app发送,
建立客户端连接配置如下。
8266wifi sdk开发指南
3.在发送窗口发送http+json协议的数据包
A.发送post请求,设置管脚gpio5
为高电平如图
8266wifi sdk开发指南
B.发送get请求查询管脚gpio5
的状态如图
C.发送一个post请求设置管脚gpio5
位低电平如图
D.发送一个get请求查询管脚gpio5的状态
8266wifi sdk开发指南
附:测试所发的数据
POST/config?command=gpioHTTP/1.1User-Agent:LuaSocket2.0.2
Content-Length:34/*实际包体长度*/Content-Type:application/jsonHost:192.168.4.1
{"gpio_set":{"gpio":5,"value":1}}
GET/config?command=gpioHTTP/1.1User-Agent:LuaSocket2.0.2
Content-Length:34/*实际包体长度*/Content-Type:application/jsonHost:192.168.4.1
{"gpio_get":{"gpio":5}}
正在阅读:
SDK 开发指南_000909-06
研究所发展规划(太阳能部分)05-05
中职英语技能大赛模拟题05-07
外墙外保温工程监理实施细则04-20
第6章 辅助生产成本与制造费用的核算05-25
匆匆那年电影经典语录11-20
EDA实验报告03-07
HCNR200 HCNR201数据手册05-13
山茶花作文600字06-28
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 开发指南
- 0009
- SDK
- MBTI职业性格测试解释
- 金属管浮子流量计选型及技术参数
- 施工巡查记录表
- 2011全国职称英语B级 真题及答案
- 酒店(餐饮)员工管理制度大全
- 美国现行的社会福利制度
- 浦东新区2008学年度第一学期期末质量抽测初二数学参考答案
- 2019-2025年中国波纹管行业市场竞争格局研究报告(目录)
- Tomasulo算法实验报告
- 现代分子生物学(第4版)_课后思考题答案
- 大学生XX年寒假社会实践报告在家做家务活
- 0016整式的加减测试题二
- unit 4 body language warming up & listening
- 案例9-1:美国联邦储备系统
- 《传感器原理及应用》课程试题(A卷)
- 2008年第21届全国高中学生化学竞赛冬令营(决赛)理论题预测
- 广西壮族自治区实施《中华人民共和国公路法》办法
- 5. 1 《降低化学反应活化能的酶》教案(新人教版必修1)
- 中药学试题及答案
- 深圳市商品住宅价格系统动力学模型仿真与政策实验_吴振华