반응형
저번에는 arduino nano33 iot를 이용해서 LED를 제어했었습니다.
이번에는 WIFI D1 R1보드를 이용하게 되었습니다.
해당 보드의 경우 arduino UNO랑 비슷한데 안에 network 통신을 위한 ESP8266이 내장되어 있습니다.
솔직한 제 생각으로는 WIFI D1 R1 가성비로는 최고인거 같습니다.
그래도 돈 많으면 arduino nano33 iot쓰세요.
저번에는 포인트가 LED제어였다면
이번에는 모터제어와 JSON전달에 초점을 맞췄습니다.
우선 보드 연결 사진입니다.
이번에는 코드에 대하여 이야기 해볼게요.
우선 motor를 제어하기 위한 코드를 작성해보겠습니다.
#define AA D5
#define AB D6
if (request.indexOf("/water") > 0 ){
Serial.println("please water");
Serial.println("Turning motor on");
digitalWrite(AA, HIGH); // 역방향은 low, high
digitalWrite(AB, LOW);
delay(3000);
digitalWrite(AA, LOW);
digitalWrite(AB, LOW);
}
위 코드에 대하여 설명해보자면
안드로이드에서 sever로 /water를 보내면 arduino에서 /water가 온 것을 확인하면 조건문을 수행합니다.
json구현의 경우
if (request.indexOf("/json") > 0){
DynamicJsonDocument doc(1024);
doc["sensor"] = "temperature";
doc["value"] = 25;
String jsonString;
serializeJson(doc, jsonString);
//client.println("HTTP/1.1 200 OK");
//client.println("Content-Type: application/json");
//client.println("Connection: close");
//client.println();
client.print(jsonString);
Serial.println("JSON response sent");
}
해당 코드를 사용하는데 사실 아직 임시용입니다.
단지 sever로 json형식을 보내는 것만 구현하면 다음 단계는 쉽기 때문에 이정도 코드로 마무리하였습니다.
그리고 arduino에서 json을 사용하려면
#include <ArduinoJson.h> //json test code
해당 라이브러리를 다운받아 사용해야만 합니다.
아래는 전체 코드입니다.
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ArduinoJson.h> //json test code
#define AA D5
#define AB D6
const char* ssid = "wifi name";
const char* password = "wifi password";
//int AA = 2; //motor
//int AB = 3; //motor
WiFiServer server(80);
void setup() {
pinMode(LED_BUILTIN, OUTPUT); //LED setup
pinMode(AA, OUTPUT); //motor setup
pinMode(AB, OUTPUT); //motor setup */
digitalWrite(AA, LOW);
digitalWrite(AB, LOW);
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(115200);
delay(1000);
/*if(WiFi.status() == WL_NO_MODULE){
Serial.println("Communication with WiFi module failed");
}*/
//WiFi 연결
delay(1000);
Serial.print("Connecting to ");
Serial.print(ssid);
WiFi.begin(ssid, password);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP Address: ");
Serial.println(WiFi.localIP());
//Server 시작
server.begin();
Serial.println("Server started");
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.print("/");
}
void loop() {
// put your main code here, to run repeatedly:
//client 접속 확인
WiFiClient client = server.available();
if(!client){
return;
}
//client가 보내는 데이터를 기다린다.
Serial.println("new client");
//client.setTimeout(5000);
while(!client.available()){
delay(1);
}
//요청을 읽는다.
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
//요청에 url에 따라 LED를 ON/Off
if (request.indexOf("/ledOn") > 0){
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("real on");
}
if (request.indexOf("/ledOff") > 0){
digitalWrite(LED_BUILTIN, LOW);
Serial.println("real off");
}
//motor
if (request.indexOf("/water") > 0 ){
Serial.println("please water");
Serial.println("Turning motor on");
digitalWrite(AA, HIGH); // 역방향은 low, high
digitalWrite(AB, LOW);
delay(3000);
digitalWrite(AA, LOW);
digitalWrite(AB, LOW);
}
while(client.available()) {
client.read();
}
client.print("HTTP/1.1 200 OK");
client.print("Content-Type: text/html\r\n\r\n");
Serial.println("클라이언트 연결 해제");
if (request.indexOf("/json") > 0){
DynamicJsonDocument doc(1024);
doc["sensor"] = "temperature";
doc["value"] = 25;
String jsonString;
serializeJson(doc, jsonString);
//client.println("HTTP/1.1 200 OK");
//client.println("Content-Type: application/json");
//client.println("Connection: close");
//client.println();
client.print(jsonString);
Serial.println("JSON response sent");
}
delay(50);
}
안드로이드 앱 구현의 경우 안드로이드 실습편에서 작성하도록 하겠습니다.
반응형
'Arduino' 카테고리의 다른 글
비전공자를 위한 Arduino를 이용하여 android 폰으로 Iot 전등 제어하기2(Arduino편) (1) | 2023.09.18 |
---|---|
비전공자를 위한 Arduino를 이용하여 android 폰으로 Iot 전등 제어하기(android편) (0) | 2023.09.09 |
오류범벅(ESP8266, ESP-01, Arduino UNO) (0) | 2023.05.25 |
두근두근 납땜하기 (0) | 2023.04.29 |
안드로이드 앱을 통해 아두이노 led 제어하기 (0) | 2023.04.15 |