代码分析
-
初始化分区
-
初始化串口(串口1 串口2都为57600) 初始化串口(串口1 串口2都为57600)
-
打印sdk版本
-
按键初始化(简短的单按钮初始化 长按 短按 按键驱动程序初始化 IO口初始化)
4.1 按键回调函数(长按函数 短按函数 内含提示灯)
4.2 长按函数为空
4.3短按函数为
4.3.1 WiFi准备(设置模式,ssid password 加密模式 信标间隔时槽 通道号(即通频带) 最大连接数 隐藏ssid 保存到flash)
4.3.2 TCP准备端口8266(分配空间 设置类型为TCP协议 本地端口 注册连接成功回调函数(server_listen)和重新连接回调函数(server_recon))创建 TCP server,建立侦听 设置超时断开时间
4.3.2 .1注册连接成功回调函数(server_listen)入口 用户tcp类型地址
4.3.2 .1.1 回调函数 接收(用cJSON解析接收的包 判断包是否为空 创建对象 给对象传递数据 打印对象 1. 如果为空 创建对象 提示json错误 2.不为空 创建对象 继承WiFi ssid password state(为0(成功连接到指定的WiFi 检测是否有IP,有代表连接成功) 为1表示连接AP) 打印信息)AP和WiFi区别是IP地址
4.3.2 .1.2发送(设置为station模式 发送信息) 断开
4.3.2 .2重新连接回调函数(server_recon) 返回错误代码和类型 -
设置ESP8266 station 上电是否自动连接已记录的AP(路由),默认为自动连接
-
设置为无睡眠模式
-
定时器回调函数 检查WIFI状态,用IO口的灯变化显示出WiFi状态打印sdk版本 按键初始化定时器回调函数 检查WIFI状态,用IO口的灯变化显示出WiFi状态
代码
user_main.c
#include "driver/uart.h" //串口0需要的头文件
#include "osapi.h" //串口1需要的头文件
#include "user_interface.h" //WIFI连接需要的头文件
#include "espconn.h"//TCP连接需要的头文件
#include "mem.h" //系统操作需要的头文件
#include "gpio.h" //端口控制需要的头文件
#include "cJSON.h"
#include "hal_key.h"
struct espconn user_tcp_espconn;
os_timer_t checkTimer_wifistate;
//按键定义
#define GPIO_KEY_NUM 1
#define KEY_0_IO_MUX PERIPHS_IO_MUX_MTMS_U
#define KEY_0_IO_NUM 14
#define KEY_0_IO_FUNC FUNC_GPIO14
LOCAL key_typedef_t * singleKey[GPIO_KEY_NUM];
LOCAL keys_typedef_t keys;
bool isConnected = false;
void Check_WifiState(void)//检查WIFI状态
{
uint8 status = wifi_station_get_connect_status();//查询ESP8266 WIFI station 接口连接AP的状态
if (status == STATION_GOT_IP)//检测是否连接AP并且返回信息
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0); //设置IO口输出电平
GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
wifi_set_opmode(0x01); //WIFI模式为station
}
else
{
GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0); //GPIO15 低电平输出
GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1); //GPIO15 低电平输出
}
}
vo