文章概述
我用的是Esp8266-12F NodeMCU
开发板。配网用安信可微信公众号
的在线配网页面。把代码贴出来并解释一下,很高兴帮到和我一样的人。
解析代码
程序目录
- App(主程序)
- action(活动相关操作)
- btn(按钮相关操作)
- led(led相关操作)
- wifi(wifi相关操作)
App
#include <ESP8266WiFi.h>
//按钮
#define btn D3
int btn_state;
int btn_press;
//按钮活动锁
bool act_BLUHG1TB_lock;
//LED
#define led 2
int led_state;
//初始化
void setup() {
action_setup();//活动管理器初始化
btn_setup();//按钮初始化
led_setup();//LED初始化
Serial.begin(115200); //打开串口是为了调试
wifi_connect();
}
//循环
void loop() {
btn_loop();
led_loop();
}
action
void action_setup(){
act_BLUHG1TB_lock = 1;
}
//活动BLUHG1TB
void act_BLUHG1TB(){
act_BLUHG1TB_lock = 0;//锁定仅运行一次
Serial.print("已进入配置模式");
wifi_smartConfig();//智能配网
wifi_connect();
}
btn
void btn_setup(){
pinMode(btn, INPUT_PULLUP);
}
void btn_loop(){
btn_refresh_state();//刷新按钮状态
btn_refresh_press();//刷新按钮按下时间
btn_action_manager();//按钮活动管理
}
//按钮活动管理主函数
void btn_action_manager(){
if(btn_press>500){
//检查任务是否可运行
if(act_BLUHG1TB_lock){
act_BLUHG1TB();
}
}
}
//刷新按钮状态
void btn_refresh_state(){
btn_state = digitalRead(btn);
}
//刷新按钮按下时间
void btn_refresh_press(){
if(btn_state==0){
if(btn_state==0){
delay(10);
btn_press++;
}
}else{
btn_press=0;
}
}
led
//LED初始化
void led_setup(){
pinMode(led,OUTPUT);
}
//LED任务
void led_loop(){
// led_state = digitalRead(btn);
// led_refresh();
}
//刷新led状态
void led_refresh(){
digitalWrite(led,led_state);
}
//设置LED状态
void led_set(int state){
led_state = state;
}
//打开LED
void led_on(){
led_set(0);
led_refresh();
}
//关闭LED
void led_off(){
led_set(1);
led_refresh();
}
//反转LED状态并更新
void led_reverse(){
led_state = !led_state;
led_refresh();
}
wifi
//智能配网
void wifi_smartConfig()
{
for(int i=0;i<10;i++){
led_reverse();
delay(100);
}
WiFi.mode(WIFI_STA); //设置WIFI模块为STA模式
Serial.println("\r\nSmartConfig");
WiFi.beginSmartConfig();//初始化smartconfig
while (1)
{
Serial.print(".");
delay(1000);
//连接成功后解锁配网活动并且打印WIFI信息
if (WiFi.smartConfigDone())
{
Serial.println("SmartConfig Success");
Serial.printf("SSID:%s", WiFi.SSID().c_str());
Serial.printf("PW:%s", WiFi.psk().c_str());//打印出密码
act_BLUHG1TB_lock = 1;//解锁配网活动使得不用重启即可即可继续配网
break;
}
}
}
//连接wifi
void wifi_connect(){
Serial.printf("\r\nConnecting to:%s", WiFi.SSID().c_str());
WiFi.begin();
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print(".");
led_reverse();//闪烁板载LED
}
Serial.print("WifiConnected!");
led_off();
}