Skip to content

Commit 443005e

Browse files
authored
Add files via upload
1 parent 23882b4 commit 443005e

5 files changed

+453
-0
lines changed

espnow_gateway.yaml

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
esphome:
2+
name: test
3+
includes:
4+
- nockanda_espnow.h
5+
6+
esp8266:
7+
board: esp01_1m
8+
9+
# Enable logging
10+
logger:
11+
12+
# Enable Home Assistant API
13+
api:
14+
15+
ota:
16+
password: "785b3a817e1f6069b8b1ce4a8677670b"
17+
18+
sensor:
19+
- platform: template
20+
name: "MYROOM1 TEMP"
21+
id: myroom1_temp
22+
- platform: template
23+
name: "MYROOM1 HUMI"
24+
id: myroom1_humi
25+
- platform: template
26+
name: "MYROOM2 TEMP"
27+
id: myroom2_temp
28+
- platform: template
29+
name: "MYROOM2 HUMI"
30+
id: myroom2_humi
31+
- platform: template
32+
name: "MYROOM3 TEMP"
33+
id: myroom3_temp
34+
- platform: template
35+
name: "MYROOM3 HUMI"
36+
id: myroom3_humi
37+
38+
button:
39+
- platform: template
40+
name: "myroom1 on sw"
41+
on_press:
42+
- lambda: |-
43+
NOCKANDA_ESPNOW.send_data(1,'0');
44+
- platform: template
45+
name: "myroom1 off sw"
46+
on_press:
47+
- lambda: |-
48+
NOCKANDA_ESPNOW.send_data(1,'1');
49+
- platform: template
50+
name: "myroom2 on sw"
51+
on_press:
52+
- lambda: |-
53+
NOCKANDA_ESPNOW.send_data(2,'0');
54+
- platform: template
55+
name: "myroom2 off sw"
56+
on_press:
57+
- lambda: |-
58+
NOCKANDA_ESPNOW.send_data(2,'1');
59+
- platform: template
60+
name: "myroom3 on sw"
61+
on_press:
62+
- lambda: |-
63+
NOCKANDA_ESPNOW.send_data(3,'0');
64+
- platform: template
65+
name: "myroom3 off sw"
66+
on_press:
67+
- lambda: |-
68+
NOCKANDA_ESPNOW.send_data(3,'1');
69+
70+
custom_component:
71+
- lambda: |-
72+
NOCKANDA_ESPNOW.begin();
73+
NOCKANDA_ESPNOW.set_recv_callback([](int myid, float temp, float humi){
74+
if(myid == 1){
75+
id(myroom1_temp).publish_state(temp);
76+
id(myroom1_humi).publish_state(humi);
77+
}else if(myid == 2){
78+
id(myroom2_temp).publish_state(temp);
79+
id(myroom2_humi).publish_state(humi);
80+
}else if(myid == 3){
81+
id(myroom3_temp).publish_state(temp);
82+
id(myroom3_humi).publish_state(humi);
83+
}
84+
});
85+
return {};
86+
87+
88+
wifi:
89+
ssid: !secret wifi_ssid
90+
password: !secret wifi_password
91+
92+
# Enable fallback hotspot (captive portal) in case wifi connection fails
93+
ap:
94+
ssid: "Test Fallback Hotspot"
95+
password: "SNsLdWWwM4jh"
96+
97+
captive_portal:
98+

espnow_node1.ino

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//10번보드의 코드
2+
3+
#include <ESP8266WiFi.h>
4+
#include <espnow.h>
5+
6+
#define myid 1
7+
8+
byte board[] = {0x34,0x94,0x54,0x62,0x6D,0x70};
9+
10+
unsigned long t = 0;
11+
12+
struct mysensor{
13+
int id;
14+
float temp;
15+
float humi;
16+
};
17+
18+
struct payload{
19+
int id;
20+
char msg;
21+
};
22+
23+
mysensor dht11;
24+
payload mypayload;
25+
26+
void setup() {
27+
// put your setup code here, to run once:
28+
29+
Serial.begin(115200);
30+
pinMode(LED_BUILTIN, OUTPUT);
31+
WiFi.mode(WIFI_STA); //제일 처음 할일! 와이파이모드를 스테이션 모드로!
32+
33+
//ESPNOW의 기능을 활성화한다!
34+
if (esp_now_init() != 0) {
35+
//ESP NOW 시작 실패!
36+
Serial.println("ESPNOW 실패!");
37+
return;
38+
}else{
39+
//ESP NOW 시작 성공!
40+
Serial.println("ESPNOW 성공!");
41+
}
42+
43+
//지금 이보드의 역할은 주고 받는것을 다하겠다!
44+
esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
45+
46+
//나의 슬레이브를 등록해야겠다!
47+
esp_now_add_peer(board, ESP_NOW_ROLE_COMBO, 1, NULL, 0);//뒤에 2개는 ID, PW
48+
49+
//송신완료 콜백함수 등록
50+
esp_now_register_send_cb(OnDataSent);
51+
52+
//수신완료 콜백 함수 등록
53+
esp_now_register_recv_cb(OnDataRecv);
54+
}
55+
56+
void loop() {
57+
// put your main code here, to run repeatedly:
58+
if(millis() - t > 2000){
59+
t = millis();
60+
dht11.id = myid;
61+
dht11.temp = random(2000,5000)/100.0;//20.00 ~ 50.00
62+
dht11.humi = random(2000,5000)/100.0;
63+
esp_now_send(board, (uint8_t *) &dht11, sizeof(dht11));
64+
}
65+
}
66+
67+
//송신콜백함수 원형:
68+
void OnDataSent(uint8_t *mac, uint8_t status) {
69+
//status가 0일때 송신 완료!
70+
if(status == 0){
71+
Serial.println("성공적으로 송신했음!");
72+
}else{
73+
Serial.println("송신 실패!!");
74+
}
75+
}
76+
77+
78+
//수신콜백함수 원형:
79+
void OnDataRecv(uint8_t * mac, uint8_t * data, uint8_t len) {
80+
memcpy(&mypayload,data,sizeof(mypayload));
81+
if(mypayload.id != myid){
82+
Serial.println("이 메시지는 나에게 온게 아닙니다!");
83+
return;
84+
}
85+
Serial.print(mypayload.id);
86+
Serial.print(", ");
87+
Serial.println(mypayload.msg);
88+
if(mypayload.msg == '0'){
89+
//켜기
90+
digitalWrite(LED_BUILTIN,LOW);
91+
}else if(mypayload.msg == '1'){
92+
//끄기
93+
digitalWrite(LED_BUILTIN,HIGH);
94+
}
95+
}

espnow_node2.ino

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//10번보드의 코드
2+
3+
#include <ESP8266WiFi.h>
4+
#include <espnow.h>
5+
6+
#define myid 2
7+
8+
byte board[] = {0x34,0x94,0x54,0x62,0x6D,0x70};
9+
10+
unsigned long t = 0;
11+
12+
struct mysensor{
13+
int id;
14+
float temp;
15+
float humi;
16+
};
17+
18+
struct payload{
19+
int id;
20+
char msg;
21+
};
22+
23+
mysensor dht11;
24+
payload mypayload;
25+
26+
void setup() {
27+
// put your setup code here, to run once:
28+
29+
Serial.begin(115200);
30+
pinMode(LED_BUILTIN, OUTPUT);
31+
WiFi.mode(WIFI_STA); //제일 처음 할일! 와이파이모드를 스테이션 모드로!
32+
33+
//ESPNOW의 기능을 활성화한다!
34+
if (esp_now_init() != 0) {
35+
//ESP NOW 시작 실패!
36+
Serial.println("ESPNOW 실패!");
37+
return;
38+
}else{
39+
//ESP NOW 시작 성공!
40+
Serial.println("ESPNOW 성공!");
41+
}
42+
43+
//지금 이보드의 역할은 주고 받는것을 다하겠다!
44+
esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
45+
46+
//나의 슬레이브를 등록해야겠다!
47+
esp_now_add_peer(board, ESP_NOW_ROLE_COMBO, 1, NULL, 0);//뒤에 2개는 ID, PW
48+
49+
//송신완료 콜백함수 등록
50+
esp_now_register_send_cb(OnDataSent);
51+
52+
//수신완료 콜백 함수 등록
53+
esp_now_register_recv_cb(OnDataRecv);
54+
}
55+
56+
void loop() {
57+
// put your main code here, to run repeatedly:
58+
if(millis() - t > 2000){
59+
t = millis();
60+
dht11.id = myid;
61+
dht11.temp = random(2000,5000)/100.0;//20.00 ~ 50.00
62+
dht11.humi = random(2000,5000)/100.0;
63+
esp_now_send(board, (uint8_t *) &dht11, sizeof(dht11));
64+
}
65+
}
66+
67+
//송신콜백함수 원형:
68+
void OnDataSent(uint8_t *mac, uint8_t status) {
69+
//status가 0일때 송신 완료!
70+
if(status == 0){
71+
Serial.println("성공적으로 송신했음!");
72+
}else{
73+
Serial.println("송신 실패!!");
74+
}
75+
}
76+
77+
78+
//수신콜백함수 원형:
79+
void OnDataRecv(uint8_t * mac, uint8_t * data, uint8_t len) {
80+
memcpy(&mypayload,data,sizeof(mypayload));
81+
if(mypayload.id != myid){
82+
Serial.println("이 메시지는 나에게 온게 아닙니다!");
83+
return;
84+
}
85+
Serial.print(mypayload.id);
86+
Serial.print(", ");
87+
Serial.println(mypayload.msg);
88+
if(mypayload.msg == '0'){
89+
//켜기
90+
digitalWrite(LED_BUILTIN,LOW);
91+
}else if(mypayload.msg == '1'){
92+
//끄기
93+
digitalWrite(LED_BUILTIN,HIGH);
94+
}
95+
}

espnow_node3.ino

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
//10번보드의 코드
2+
3+
#include <ESP8266WiFi.h>
4+
#include <espnow.h>
5+
6+
#define myid 3
7+
8+
byte board[] = {0x34,0x94,0x54,0x62,0x6D,0x70};
9+
10+
unsigned long t = 0;
11+
12+
struct mysensor{
13+
int id;
14+
float temp;
15+
float humi;
16+
};
17+
18+
struct payload{
19+
int id;
20+
char msg;
21+
};
22+
23+
mysensor dht11;
24+
payload mypayload;
25+
26+
void setup() {
27+
// put your setup code here, to run once:
28+
29+
Serial.begin(115200);
30+
pinMode(LED_BUILTIN, OUTPUT);
31+
WiFi.mode(WIFI_STA); //제일 처음 할일! 와이파이모드를 스테이션 모드로!
32+
33+
//ESPNOW의 기능을 활성화한다!
34+
if (esp_now_init() != 0) {
35+
//ESP NOW 시작 실패!
36+
Serial.println("ESPNOW 실패!");
37+
return;
38+
}else{
39+
//ESP NOW 시작 성공!
40+
Serial.println("ESPNOW 성공!");
41+
}
42+
43+
//지금 이보드의 역할은 주고 받는것을 다하겠다!
44+
esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
45+
46+
//나의 슬레이브를 등록해야겠다!
47+
esp_now_add_peer(board, ESP_NOW_ROLE_COMBO, 1, NULL, 0);//뒤에 2개는 ID, PW
48+
49+
//송신완료 콜백함수 등록
50+
esp_now_register_send_cb(OnDataSent);
51+
52+
//수신완료 콜백 함수 등록
53+
esp_now_register_recv_cb(OnDataRecv);
54+
}
55+
56+
void loop() {
57+
// put your main code here, to run repeatedly:
58+
if(millis() - t > 2000){
59+
t = millis();
60+
dht11.id = myid;
61+
dht11.temp = random(2000,5000)/100.0;//20.00 ~ 50.00
62+
dht11.humi = random(2000,5000)/100.0;
63+
esp_now_send(board, (uint8_t *) &dht11, sizeof(dht11));
64+
}
65+
}
66+
67+
//송신콜백함수 원형:
68+
void OnDataSent(uint8_t *mac, uint8_t status) {
69+
//status가 0일때 송신 완료!
70+
if(status == 0){
71+
Serial.println("성공적으로 송신했음!");
72+
}else{
73+
Serial.println("송신 실패!!");
74+
}
75+
}
76+
77+
78+
//수신콜백함수 원형:
79+
void OnDataRecv(uint8_t * mac, uint8_t * data, uint8_t len) {
80+
memcpy(&mypayload,data,sizeof(mypayload));
81+
if(mypayload.id != myid){
82+
Serial.println("이 메시지는 나에게 온게 아닙니다!");
83+
return;
84+
}
85+
Serial.print(mypayload.id);
86+
Serial.print(", ");
87+
Serial.println(mypayload.msg);
88+
if(mypayload.msg == '0'){
89+
//켜기
90+
digitalWrite(LED_BUILTIN,LOW);
91+
}else if(mypayload.msg == '1'){
92+
//끄기
93+
digitalWrite(LED_BUILTIN,HIGH);
94+
}
95+
}

0 commit comments

Comments
 (0)