airkiss java sdk_26-ESP8266 SDK开发基础入门篇--编写WIFI模块 SmartConfig/Airkiss 一键配网...

#include "esp_common.h"#include"freertos/FreeRTOS.h"#include"freertos/task.h"#include"lwip/sockets.h"#include"lwip/dns.h"#include"lwip/netdb.h"#include"espressif/espconn.h"#include"espressif/airkiss.h"

#define server_ip "192.168.101.142"

#define server_port 9669

#define DEVICE_TYPE "gh_9e2cff3dfa51" //wechat public number

#define DEVICE_ID "122475" //model ID

#define DEFAULT_LAN_PORT 12476LOCAL esp_udp ssdp_udp;

LOCALstructespconn pssdpudpconn;

LOCAL os_timer_t ssdp_time_serv;

uint8 lan_buf[200];

uint16 lan_buf_len;

uint8 udp_sent_cnt= 0;const airkiss_config_t akconf ={

(airkiss_memset_fn)&memset,

(airkiss_memcpy_fn)&memcpy,

(airkiss_memcmp_fn)&memcmp,0,

};

LOCALvoidICACHE_FLASH_ATTR

airkiss_wifilan_time_callback(void)

{

uint16 i;

airkiss_lan_ret_t ret;if ((udp_sent_cnt++) >30) {

udp_sent_cnt= 0;

os_timer_disarm(&ssdp_time_serv);//s//return;

}

ssdp_udp.remote_port=DEFAULT_LAN_PORT;

ssdp_udp.remote_ip[0] = 255;

ssdp_udp.remote_ip[1] = 255;

ssdp_udp.remote_ip[2] = 255;

ssdp_udp.remote_ip[3] = 255;

lan_buf_len= sizeof(lan_buf);

ret=airkiss_lan_pack(AIRKISS_LAN_SSDP_NOTIFY_CMD,

DEVICE_TYPE, DEVICE_ID,0, 0, lan_buf, &lan_buf_len, &akconf);if (ret !=AIRKISS_LAN_PAKE_READY) {

os_printf("Pack lan packet error!");return;

}

ret= espconn_sendto(&pssdpudpconn, lan_buf, lan_buf_len);if (ret != 0) {

os_printf("UDP send error!");

}

os_printf("Finish send notify!\n");

}

LOCALvoidICACHE_FLASH_ATTR

airkiss_wifilan_recv_callbk(void *arg, char *pdata, unsigned shortlen)

{

uint16 i;

remot_info* pcon_info =NULL;

airkiss_lan_ret_t ret= airkiss_lan_recv(pdata, len, &akconf);

airkiss_lan_ret_t packret;switch(ret){caseAIRKISS_LAN_SSDP_REQ:

espconn_get_connection_info(&pssdpudpconn, &pcon_info, 0);

os_printf("remote ip: %d.%d.%d.%d \r\n",pcon_info->remote_ip[0],pcon_info->remote_ip[1],

pcon_info->remote_ip[2],pcon_info->remote_ip[3]);

os_printf("remote port: %d \r\n",pcon_info->remote_port);

pssdpudpconn.proto.udp->remote_port = pcon_info->remote_port;

memcpy(pssdpudpconn.proto.udp->remote_ip,pcon_info->remote_ip,4);

ssdp_udp.remote_port=DEFAULT_LAN_PORT;

lan_buf_len= sizeof(lan_buf);

packret=airkiss_lan_pack(AIRKISS_LAN_SSDP_RESP_CMD,

DEVICE_TYPE, DEVICE_ID,0, 0, lan_buf, &lan_buf_len, &akconf);if (packret !=AIRKISS_LAN_PAKE_READY) {

os_printf("Pack lan packet error!");return;

}

os_printf("\r\n\r\n");for (i=0; i

os_printf("%c",lan_buf[i]);

os_printf("\r\n\r\n");

packret= espconn_sendto(&pssdpudpconn, lan_buf, lan_buf_len);if (packret != 0) {

os_printf("LAN UDP Send err!");

}break;default:

os_printf("Pack is not ssdq req!%d\r\n",ret);break;

}

}voidICACHE_FLASH_ATTR

airkiss_start_discover(void)

{

ssdp_udp.local_port=DEFAULT_LAN_PORT;

pssdpudpconn.type=ESPCONN_UDP;

pssdpudpconn.proto.udp= &(ssdp_udp);

espconn_regist_recvcb(&pssdpudpconn, airkiss_wifilan_recv_callbk);

espconn_create(&pssdpudpconn);

os_timer_disarm(&ssdp_time_serv);

os_timer_setfn(&ssdp_time_serv, (os_timer_func_t *)airkiss_wifilan_time_callback, NULL);

os_timer_arm(&ssdp_time_serv, 1000, 1);//1s

}voidICACHE_FLASH_ATTR

smartconfig_done(sc_status status,void *pdata)

{switch(status) {caseSC_STATUS_WAIT:

printf("SC_STATUS_WAIT\n");break;caseSC_STATUS_FIND_CHANNEL:

printf("SC_STATUS_FIND_CHANNEL\n");break;caseSC_STATUS_GETTING_SSID_PSWD:

printf("SC_STATUS_GETTING_SSID_PSWD\n");

sc_type*type =pdata;if (*type ==SC_TYPE_ESPTOUCH) {

printf("SC_TYPE:SC_TYPE_ESPTOUCH\n");

}else{

printf("SC_TYPE:SC_TYPE_AIRKISS\n");

}break;caseSC_STATUS_LINK:

printf("SC_STATUS_LINK\n");struct station_config *sta_conf =pdata;

wifi_station_set_config(sta_conf);

wifi_station_disconnect();

wifi_station_connect();break;caseSC_STATUS_LINK_OVER:

printf("SC_STATUS_LINK_OVER\n");if (pdata !=NULL) {//SC_TYPE_ESPTOUCH

uint8 phone_ip[4] = {0};

memcpy(phone_ip, (uint8*)pdata, 4);

printf("Phone ip: %d.%d.%d.%d\n",phone_ip[0],phone_ip[1],phone_ip[2],phone_ip[3]);

}else{//SC_TYPE_AIRKISS - support airkiss v2.0

airkiss_start_discover();

}

smartconfig_stop();break;

}

}voidICACHE_FLASH_ATTR

smartconfig_task(void *pvParameters)

{

smartconfig_start(smartconfig_done);

vTaskDelete(NULL);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值