이 프로젝트 정보
개요:
이 멋진 IoT 프로젝트에서는 하나의 Arduino UNO에 연결된 습도 및 온도 센서에서 데이터를 읽습니다. 이 데이터를 esp8266 모듈을 사용하여 Firebase에 보낸 다음 esp8266을 사용하여 다른 Arduino UNO에 데이터를 다운로드하여 최종적으로 LCD에 표시합니다.
1단계:Arduino UNO와 ESP8266이 함께 작동하는 방식을 이해합니다.
두 개의 다른 보드로 작동하며 다른 코드를 가지고 있습니다. Arduino UNO를 사용하여 ESP8266과 통신합니다. Arduino를 인터넷에 연결하는 것이 아니라 ESP8266을 인터넷에 연결하고 있음을 이해하십시오. 나중에 직렬 터미널을 통해 두 보드 간에 데이터를 보낼 수 있습니다.
2단계:하나의 Arduino를 LCD에 연결
이 부분은 기존의 I2C 통신이나 일반 통신을 사용하시면 됩니다. I2C는 항상 더 좋습니다. 그들이 제시하는 예제 코드를 사용해 보십시오.
20x4 LCD를 사용했습니다. 필요한 경우 코드를 변경하십시오.
3단계:다른 Arduino를 DHT11 센서에 연결
이 자습서를 따라 작동하도록 할 수 있습니다. 템플릿 코드를 시도하는 것을 잊지 마십시오.
4단계:ESP8266을 Firebase에 연결하여 데이터 송수신
이 튜토리얼에서는 설정 방법을 아주 잘 설명합니다.
이 단계별 비디오를 따르십시오. 그들은 NodeMCU를 ESP8266에 연결하지만 Arduino UNO에 동일한 연결을 사용할 수 있습니다.
조언으로, 혼동하지 않도록 Google 시트를 만들거나 ESP8266에 사용하는 색상으로 엑셀을 작성하는 것이 좋습니다.
작동하지 않으면 끝에 있는 오류 부분으로 이동합니다. 또한 , 튜토리얼의 댓글을 확인하세요.
5단계:직렬 통신이 작동하는 방식을 이해합니다.
이 튜토리얼에서는 다른 센서 데이터를 Firebase로 보냅니다. 이를 읽고 작동 방식에 대한 아이디어를 얻거나 시도해 볼 수도 있습니다.
직렬 모니터에 원하는 문자열만 인쇄해야 합니다. 다른 인쇄 라인은 통신을 방해합니다.
6단계:코드를 업로드합니다.
이제 데이터 업로드 및 수신 방법을 알았으므로 Arduino 및 Arduino에 연결된 esp8266에 실제 코드를 업로드할 수 있습니다. 코드 업로드 방법은 4단계를 참조하세요.
업로드하기 전에 코드를 읽고 필요한 사항을 변경하세요.
일반적인 오류 및 조언:
전선을 분리하기 전에 항상 ARDUINO 케이블을 분리하십시오.
ESP8266에 코드가 업로드되지 않음:
<울> esp8266 일반 보드를 선택합니다.
<울> 코드가 여전히 업로드되지 않고 오류가 발생하면 이렇게 하십시오.
<울> 여전히 작동하지 않으면 플러그를 뽑고 다시 연결하고 업로드를 시도한 다음 이전 해결 방법을 다시 시도하세요.
Arduino UNO에 코드가 업로드되지 않음:
<울> 이 문서의 7단계에서 Arduino UNO에 코드를 업로드하는 방법을 주의 깊게 읽으십시오.
<울> GND에서 GPIO-0(IO0)을, Uno의 Ground/GND 핀에서 Arduino Uno RESET 핀을 빼냅니다.
<울> UNO의 RX 핀에서 ESP8266 RX 핀을 제거하고 UNO의 TX 핀에서 ESP8266 TX 핀을 제거합니다.
<울> 핀을 다시 확인하고 Arduino UNO 보드를 선택합니다.
두 코드를 모두 업로드한 후 작동하지 않음:
<울> ESP8266 RX 핀을 Uno의 TX 핀에 연결하고 ESP8266 TX 핀을 Uno의 RX 핀에 연결합니다. 예, 반대로 연결해야 합니다. 이유는 묻지 마세요. 그냥 하세요.
<울> GND에서 ESP8266 GPIO-0(IO0)을 분리합니다.
<울> 핀 다시 확인
<울> 직렬 모니터에서 Arduino와 ESP8266 간에 공유하려는 값만 인쇄하고 있는지 확인하십시오. "connected"나 다른 것을 인쇄하면 코드가 작동하지 않습니다.
참고: 작동하고 LCD에 이상한 것이 인쇄되면 몇 초 후에 수정해야 합니다. 함께 초기화 기능. 이는 직렬 통신 지연으로 인해 발생할 수 있습니다.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드"> 코드
<울> lcd_arduino.ino
lcd_esp8266.ino
sensor_arduino.ino
sensor_esp8266.ino
lcd_arduino.ino아두이노
Arduino_LCD_Code#include #include // 필요한 LCD 인터페이스 핀을 연결하여 라이브러리를 초기화합니다. // LiquidCrystal_I2C lcd(0x3F, 20, 4)에 연결된 arduino 핀 번호와 연결합니다. 문자열 값, sensor_data;void setup() { Serial.begin(9600); 지연(2000); // LCD의 열과 행 수 설정:lcd.begin(20, 4); // LCD에 메시지를 인쇄합니다. lcd.init(); // LCD 초기화 lcd.backlight(); 지연(2000); lcd.setCursor(0, 0); lcd.print("온도:" ); 지연(10); lcd.setCursor(18, 0); lcd.print("C"); 지연(10); lcd.setCursor(0, 1); lcd.print("습도:"); 지연(10); lcd.setCursor(15, 1); lcd.print("%"); 지연(2000);} 무효 루프() { 부울 Sr =거짓; while (Serial.available()) { // sensor_data에 넣어 직렬에서 센서 데이터를 가져옵니다. sensor_data =Serial.readString(); Sr =사실; } 지연(1000); if (Sr ==true) { 값 =sensor_data; // 쉼표로 분할하여 값 변수에서 센서 데이터를 가져오고 변수에 넣습니다. String temperature =values.substring(0, 5); 문자열 습도 =values.substring(6, 11); 초기화(); lcd.setCursor(13, 0); 지연(10); lcd.print(온도);//온도 지연을 인쇄하도록 커서를 설정합니다(10); lcd.setCursor(10, 1); 지연(10); lcd.print(습도); } 지연(2000);}무효 초기화() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("온도:" ); 지연(10); lcd.setCursor(18, 0); lcd.print("C"); 지연(10); lcd.setCursor(0, 1); lcd.print("습도:"); 지연(10); lcd.setCursor(15, 1); lcd.print("%");}
lcd_esp8266.ino아두이노
ESP8266_LCD_Code#include #include #define FIREBASE_HOST "YOUR_FIREBASE_LINK#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN#define WIFI_SSID" 값 무효 WIFI_SSID "YOUR_WIFI_SSID;#WIFI"define Serial.begin(9600); // 와이파이에 연결합니다. WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 동안 (WiFi.status() !=WL_CONNECTED) { 지연(500); } Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);}void 루프() { 문자열 온도 =Firebase.getString("온도"); 문자열 습도 =Firebase.getString("습도"); 온도 =temperature.substring(0, 5); 습도 =습도.substring(0, 5); 값 =(온도 + 습도); 지연(10); // 인쇄하기 전에 항상 플러시 Serial.flush(); 지연(1000); Serial.print(값); 지연(1000);}
sensor_arduino.ino아두이노
Arduino_Sensor_Code#include #include #define dht_apin A0dht DHT;String values;void setup() { Serial.begin(9600); 지연(5000); //시스템 부팅 지연} void loop() { DHT.read11(dht_apin); 값 =(문자열(DHT.온도) + ',' + 문자열(DHT.습도)); 지연(10); Serial.flush(); 지연(1000); // 센서 데이터를 직렬로 전송(센서 데이터를 ESP8266으로 전송) Serial.print(values); 지연(2000);}
sensor_esp8266.ino아두이노
Sensor_ESP8266_Code#include #include #define FIREBASE_HOST "YOUR_FIREBASE_LINK#define FIREBASE_AUTH "YOUR_FIREBASE_TOKEN"#define WIFI_SSID 설정값 ) { 지연(1000); // 와이파이에 연결합니다. WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 동안 (WiFi.status() !=WL_CONNECTED) { 지연(500); } Serial.begin(9600); Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);} 무효 루프() { 부울 Sr =거짓; while (Serial.available()) { // sensor_data에 넣어 직렬에서 센서 데이터를 가져옵니다. sensor_data =Serial.readString(); Sr =사실; } 지연(1000); if (Sr ==true) { 값 =sensor_data; //값 변수에서 쉼표 인덱스 가져오기 int fristCommaIndex =values.indexOf(','); int secondCommaIndex =values.indexOf(',', fristCommaIndex + 1); // 쉼표로 분할하여 값 변수에서 센서 데이터를 가져오고 변수에 넣습니다. String temperature =values.substring(0, fristCommaIndex); 문자열 습도 =values.substring(fristCommaIndex + 1, secondCommaIndex); // 초음파 센서 데이터를 Firebase.setString("온도", 온도)에 문자열로 저장합니다. 지연(10); // IR 센서 1 데이터를 Firebase.setString("humidity", 습도)에 문자열로 저장합니다. 지연(10); //이전 센서 데이터를 Firebase delay(1000)에 문자열로 저장합니다. if (Firebase.failed()) { 반환; } }}
섹션>