当前位置: 首页 > news >正文

做电影网站需要服务器彩票网站建设需要什么

做电影网站需要服务器,彩票网站建设需要什么,做母婴用品的网站有哪些,正中路桥建设发展有限公司网站SmartConfig一键配网 一、SmartConfig知识扫盲 在讲STA课程的时候#xff0c;我们用的是代码里面固定的SSID和密码去连接热点#xff0c;但实际应用中不可能这么弄#xff0c;我们得有办法把家里的WiFi SSID和密码输入到设备里面去#xff0c;对于带屏带输入设备还…SmartConfig一键配网 一、SmartConfig知识扫盲        在讲STA课程的时候我们用的是代码里面固定的SSID和密码去连接热点但实际应用中不可能这么弄我们得有办法把家里的WiFi SSID和密码输入到设备里面去对于带屏带输入设备还好因为可以人为手动输入但很多IOT设备都不具备这种能力因此我们需要其他方法。把SSID和密码告诉给设备让设备能正确连接WiFi热点接入到物联网的过程称为配网。 配网方式有很多种比如AP配网、蓝牙配网还有本课介绍的SmartConfig一键配网SmartConfig对用户来说操作是最简单的配网方式其配网原理比较巧妙我们来看下SmartConfig的基本原理到底如何。        首先要让WiFi芯片处于混杂模式下,监听网络中的所有报文;手机APP将SSID和密码编码到 UDP 报文中,通过广播包或组播报发送,智能硬件接收到 UDP 报文后解码,得到正确的 SSID 和密码,然后主动连接指定 SSID 的路由完成连接。 具体是如何接收报文的另外在802.11协议中MAC帧数据域是加密的设备没有连上WiFi是无法读取这部分内容的。具体帧格式如下图我们只关注MAC帧中的数据域MSDU  解析我们知道这部分数据的长度这部分数据是由20字节IPv4头部8字节UDP报文头部UDP内容组成的IP报文假如IP报文长度为500字节则UDP内容长度为500-20-8472字节这里我们定义500字节称为明文长度。  我们再制定一个定义密文长度明文长度算法常量算法常量往往是一个固定值由APP和WIFI设备默认。  假如算法常量是10。现在手机APP要传输1234这个数据只需要在UDP报文内容中填充1234-20(Ipv4头)-8(UDP报头)-10算法常量个字节即可内容任意也就是   IP报文总长1224        Ipv4头20字节        UDP头8字节        UDP内容1196字节 也就是说我们通过UDP广播发送1196个字节就行内容任意。 当设备收到这个UDP报文后需要解码先得到IP报文长度1224然后我们要加上算法常量10得到1234因此设备最终获得了1234这个数据。  那么对于设备来说如何知道这个UDP广播包就是SmartConfig发出的呢这里涉及到一个前导码的概念当设备WIFI开启混杂模式时会在所处环境中快速切换各条信道来抓取每个信道中的数据包当遇到正在发送前导码数据包的信道时锁定该信道并继续接收广播数据直到收到足够的数据来解码出其中的WiFi密码然后连接WiFi因此前导码一般由几个特殊的字节组成方便和其他UDP包区分。  假设手机APP要发送”test”四个字符算法常量为16流程如下       1APP连续发送3个UDP广播包数据为均为前导码。       2APP发送1个UDP广播包IP报文数据长度为’t’-16。       3APP发送1个UDP广播包IP报文数据长度为’e’-16。       4APP发送1个UDP广播包IP报文数据长度为’s’-16。       5APP发送1个UDP广播包IP报文数据长度为’t’-16。       6APP切换WIFI信道重复上述步骤 上述是数据传输的基本原理但由于每一家厂商的算法常量、传输内容格式、前导码等都不一样因此不同厂家之间的SmartConfig一般无法通用。 二、ESP32中的SmartConfig        通过查看esp-idf的源码发现ESP32上的SmartConfig实现是看不到源码的但不妨碍我们使用而使用方式也比较简单当然需要配合APP来使用乐鑫官方也提供了demo版本的APP这个是开源的我们可以集成到自己的APP应用中下载地址是  安卓 https://github.com/EspressifApp/EsptouchForAndroid/releases/tag/v2.0.0/esptouch-v2.0.0.apk IOS https://apps.apple.com/cn/app/espressif-esptouch/id1071176700 接下来看下ESP32源码源码位于esp32-board/wifi_smartconfig        由于在实际应用工程中进入SmartConfig一般都是长按某个按键因此这个例程中也把之前按键短按长按处理的例程搬过来用了长按3秒触发SmartConfig。 app_main()如下  //按键事件组 static EventGroupHandle_t s_pressEvent; #define SHORT_EV    BIT0    //短按 #define LONG_EV     BIT1    //长按 #define BTN_GPIO    GPIO_NUM_39/** 长按按键回调函数* param 无* return 无 */ void long_press_handle(void) {xEventGroupSetBits(s_pressEvent,LONG_EV); } void app_main(void) {nvs_flash_init();           //初始化NVSinitialise_wifi();          //初始化wifis_pressEvent xEventGroupCreate();button_config_t btn_cfg {.gpio_num BTN_GPIO,       //gpio号.active_level 0,          //按下的电平.long_press_time 3000,    //长按时间.short_cb NULL,           //短按回调函数.long_cb smartconfig_start             //长按回调函数};button_event_set(btn_cfg);     //添加按键响应事件处理EventBits_t ev;while(1){ev xEventGroupWaitBits(s_pressEvent,LONG_EV,pdTRUE,pdFALSE,portMAX_DELAY);if(ev LONG_EV){smartconfig_start();    //检测到长按事件启动smartconfig}} } app_main()中注册了长按按键事件主循环中检测到了长按事件执行smartconfig_start函数启动SmartConfig。  接下来看下main/wifi_smartconfig.c文件对SmartConfig的处理  /** 启动smartconfig* param 无* return 无 */ void smartconfig_start(void) {if(!s_is_smartconfig){s_is_smartconfig true;esp_wifi_disconnect();xTaskCreate(smartconfig_example_task, smartconfig_example_task, 4096, NULL, 3, NULL);} } smartconfig_start函数里面会断开wifi连接然后启用一个smartconfig任务s_is_smartconfig标志是SmartConfig运行标志防止重复执行SmartConfig。  /** smartconfig处理任务* param 无* return 无 */ static void smartconfig_example_task(void * parm) {EventBits_t uxBits;ESP_ERROR_CHECK( esp_smartconfig_set_type(SC_TYPE_ESPTOUCH_V2) );           //设定SmartConfig版本smartconfig_start_config_t cfg SMARTCONFIG_START_CONFIG_DEFAULT();ESP_ERROR_CHECK( esp_smartconfig_start(cfg) ); //启动SmartConfigwhile (1) {uxBits xEventGroupWaitBits(s_wifi_event_group, CONNECTED_BIT | ESPTOUCH_DONE_BIT, true, false, portMAX_DELAY);if(uxBits CONNECTED_BIT) {ESP_LOGI(TAG, WiFi Connected to ap);}if(uxBits ESPTOUCH_DONE_BIT) {    //收到smartconfig配网完成通知ESP_LOGI(TAG, smartconfig over);esp_smartconfig_stop();         //停止smartconfig配网write_nvs_ssid(s_ssid_value);   //将ssid写入NVSwrite_nvs_password(s_password_value);   //将password写入NVSs_is_smartconfig false;       vTaskDelete(NULL);              //退出任务}} } 在smartconfig_example_task中会设定SmartConfig的版本可以选V1、V2、AirKiss微信用的版本之间不兼容我这边选用了V2然后esp_smartconfig_start(cfg)启动SmartConfig后面会监听两个事件一个是WiFi连接成功事件一个是SmartConfig完成事件当SmartConfig完成后我们把SSID和密码保存到NVS中然后退出任务结束整个SmartConfig流程。  /** 各种网络事件的回调函数* param arg 自定义参数* param event_base 事件类型* param event_id 事件标识ID不同的事件类型都有不同的实际标识ID* param event_data 事件携带的数据 */ static void event_handler(void* arg, esp_event_base_t event_base,int32_t event_id, void* event_data) {if (event_base WIFI_EVENT event_id WIFI_EVENT_STA_START) {if(s_ssid_value[0] ! 0)esp_wifi_connect();} else if (event_base WIFI_EVENT event_id WIFI_EVENT_STA_DISCONNECTED) {//WIFI断开连接后再次发起连接if(!s_is_smartconfig)esp_wifi_connect();//清除连接标志位xEventGroupClearBits(s_wifi_event_group, CONNECTED_BIT);} else if (event_base IP_EVENT event_id IP_EVENT_STA_GOT_IP) {//获取到IP置位连接事件标志位xEventGroupSetBits(s_wifi_event_group, CONNECTED_BIT);} else if (event_base SC_EVENT event_id SC_EVENT_SCAN_DONE) {//smartconfig 扫描完成ESP_LOGI(TAG, Scan done);} else if (event_base SC_EVENT event_id SC_EVENT_FOUND_CHANNEL) {//smartconfig 找到对应的通道ESP_LOGI(TAG, Found channel);} else if (event_base SC_EVENT event_id SC_EVENT_GOT_SSID_PSWD) {//smartconfig 获取到SSID和密码ESP_LOGI(TAG, Got SSID and password);smartconfig_event_got_ssid_pswd_t *evt (smartconfig_event_got_ssid_pswd_t *)event_data;wifi_config_t wifi_config;uint8_t ssid[33] { 0 };uint8_t password[65] { 0 };//从event_data中提取SSID和密码bzero(wifi_config, sizeof(wifi_config_t));memcpy(wifi_config.sta.ssid, evt-ssid, sizeof(wifi_config.sta.ssid));memcpy(wifi_config.sta.password, evt-password, sizeof(wifi_config.sta.password));wifi_config.sta.bssid_set evt-bssid_set;if (wifi_config.sta.bssid_set true) {memcpy(wifi_config.sta.bssid, evt-bssid, sizeof(wifi_config.sta.bssid));}memcpy(ssid, evt-ssid, sizeof(evt-ssid));memcpy(password, evt-password, sizeof(evt-password));ESP_LOGI(TAG, SSID:%s, ssid);ESP_LOGI(TAG, PASSWORD:%s, password);snprintf(s_ssid_value,33,%s,(char*)ssid);snprintf(s_password_value,65,%s,(char*)password);//重新连接WIFIESP_ERROR_CHECK( esp_wifi_disconnect() );ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, wifi_config) );esp_wifi_connect();} else if (event_base SC_EVENT event_id SC_EVENT_SEND_ACK_DONE) {//smartconfig 已发起回应xEventGroupSetBits(s_wifi_event_group, ESPTOUCH_DONE_BIT);} } 在事件处理回调函数中包含了对SmartConfig的处理比较关键的是SC_EVENT_GOT_SSID_PSWD和SC_EVENT_SEND_ACK_DONE事件SC_EVENT_GOT_SSID_PSWD事件表示已经获取到SSID和密码了接下来我们可以发起连接。SC_EVENT_SEND_ACK_DON事件表示SmartConfig完成配网可以结束了通知SmartConfig任务退出。  由此可见esp-idf对SmartConfig功能进行了高度封装我们基本不用做复杂的处理就可以使用十分方便完整的代码请看esp32-board/wifi_smartconfigidf.py buildidf.py flash烧录到开发板后就可以运行。另外大家可以看下官方的demo APP 左边是V1版本右边是V2版本在进入APP的时候可以选择使用的时候需要手机连接当前的2.4G WiFi然后输入密码点击确定的时候就开始了开发板上长按按键3秒查看串口打印开始了SmartConfig即可松手过一会就会自动的完成配网。  最后附上相关资料 ESP32教程资料链接https://pan.baidu.com/s/1kCjD8yktZECSGmHomx_veg?pwdq8er  提取码q8er  配套源码下载地址esp32-board: esp32开发板配套的经典例程 鉴于实验需要开发板的支持我也设计了一款ESP32开发板包含部分传感器模块1.69寸LCD高亮屏Type-C一键下载方便大家学习和做各种实验。开发板链接如下 https://item.taobao.com/item.htm?fttid802401650392spma21dvs.23580594.0.0.4fee645eXpkfcpskuId5635015963649   ​​ 请大家多多支持。
http://www.ho-use.cn/article/10812012.html

相关文章:

  • 企业网站的建设目的是什么经典网络广告案例分析
  • 网站建设logo尺寸东莞网站建设价格
  • 网站加强阵地建设与管理易点租电脑租赁官网
  • 昆明市网站推广搜索网络如何制造
  • 博罗网站建设本地app制作公司
  • 网站备案的要求重庆seo是什么
  • 黄山网站建设找哪家做网站域名的成本
  • canvas效果网站上海本地app推荐
  • 如何做一个内部网站中文响应式网站
  • 校园电子商务网站建设精品网站开发
  • 12黄页网站建设网站做推广百度好还是360好
  • 企业网站建设怎么样鲜花网站建设店
  • 做网站 服务器多少钱一年网站建设宣传的目的
  • 制作网站要什么软件百度代发排名
  • 不需要网站备案的广告联盟网站建设辅助导航
  • 可以做伦铜的网站上市公司
  • 深圳甜富设计网站seo最新优化方法
  • 甘露园网站建设商业网站源码免费下载
  • 受欢迎的唐山网站建设济南市建设工程交易网
  • 哪个网站能帮助做试卷学网站建设的好处
  • 做视频导航网站农家乐网站模板
  • 做网站软件下载搬家公司收费价格表
  • 做餐饮如何加入外卖网站西安前端开发培训机构哪个比较好
  • wap网站自动西安企业电话
  • 比较大网站建设公司南山制作网站公司
  • 柳州做网站有kv文创产品设计手绘
  • 北京市丰台区建设部官方网站怀化主要网站
  • 购物网站设计目标焦作专业做网站公司
  • 北京 代理前置审批 网站备案注册公司经营范围怎么选择
  • 洛阳网站建设哪家好培训学校网站建设要点