ESP8266例程解析⑪NOW解析

一、简介

路由器一个(连网,连网关esp8266),esp8266至少2个(1个既作为连接路由器,又作为热电连接其他esp8266(即子设备))
ESP-NOW用户手册:http://wiki.ai-thinker.com/_media/esp8266/docs/30c_esp-now_user_guide_cn.pdf

ESP8266例程解析⑪NOW解析_第1张图片

ESP8266例程解析⑪NOW解析_第2张图片
ESP8266例程解析⑪NOW解析_第3张图片
ESP8266例程解析⑪NOW解析_第4张图片
ESP8266例程解析⑪NOW解析_第5张图片

二、应用代码流程分析

  • 网关设备初始化
    设置模式为station、账号,密码都是自己路由器的 保存配置到flash 连接路由器(打印状态) 初始化ESP-NOW功能(打印状态 ) 注册 ESP-NOW 收包的回调函数 注册发包回调函数 设置自身ESP-NOW的角色 增加ESP-NOW匹配设备,将子设备mac地址存入ESP-NOW维护的列表 开始定时发送消息给所有子设备(即定时器回调) 发送ESP-NOW数据包
  • 子设备初始化
    设置模式为station、账号,密码都是自己路由器的 保存配置到flash 连接路由器(打印状态) 查询mac(打印mac) 初始化ESP-NOW功能(打印状态 ) 注册 ESP-NOW 收包的回调函数 注册发包回调函数 设置自身ESP-NOW的角色
    增加ESP-NOW匹配设备,将网关设备的Mac地址存入ESP-NOW维护的列表 开始定时发送消息给所有网关设备(即定时器回调) 发送ESP-NOW数据包

附部分关键代码

void GateWay_Device_init() 
{

	wifi_set_opmode(STATION_MODE);	//设置为STATION模式
	struct station_config stationConf;
	os_strcpy(stationConf.ssid, "xiaofang");	  //改成你自己的   路由器的用户名
	os_strcpy(stationConf.password, "12345678"); //改成你自己的   路由器的密码
	wifi_station_set_config(&stationConf);	//设置WiFi station接口配置,并保存到 flash
	wifi_station_connect();	//连接路由器
	os_printf("As a gateWay ...\r\n");

	if (esp_now_init() == 0)
	 {

		os_printf("esp_now gateWay device init ok! \n");
		// 注册 ESP-NOW 收包的回调函数
		esp_now_register_recv_cb(gateway_esp_now_recv_cb);
		// 注册发包回调函数
		esp_now_register_send_cb(gateway_esp_now_send_cb);

		esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
		//添加子设备,信道为1,不加密,
		esp_now_add_peer(slaveDeviceMac_1, ESP_NOW_ROLE_COMBO, 1, NULL, 16);
		esp_now_add_peer(slaveDeviceMac_2, ESP_NOW_ROLE_COMBO, 1, NULL, 16);

		//开始定时发送消息给所有子设备
		os_timer_disarm(&gateway_esp_now_timer);
		os_timer_setfn(&gateway_esp_now_timer,
				(os_timer_func_t *) gateway_esp_now_timer_cb, NULL);
		os_timer_arm(&gateway_esp_now_timer, 3000, 1);

	}

你可能感兴趣的:(ESP8266)