WeMos LOLIN 보드의 무선 WiFi 성능에 주목해 보자. 바로 앞에 LOLIN 보드에 온습도 센서를 설치하여 측정한 값을 ThingSpeak 사물인터넷 사이트에 전송해본 경험이 있지만 타 보드에서 사용하던 코드를 살짝 수정해서 과연 무선 WiFi 가 작동하는지 여부를 단순 판가름 하였을 뿐이다.
WeMos LOLIN 보드가 최근에 출시된 보드이기 때문에 조심스럽게 보드의 기본적인 성능을 체크해 본 결과 analogWrite 명령을 제외하고 큰 문제는 없었다. 물론 analogWrite 명령이 직접 컴파일 되지는 않았으나 그 대체 명령으로 좀 번거롭긴 해도 ledcWrite 명령으로 대체가 가능하였다. 이 점에 관해서는 2개의 핀에서 ledcWrite 명령 실행이 가능한지 좀 더 확인이 필요한 듯하다.
드디어 이번 단계에서는 무선 WiFi 성능을 확인해 보도록 하겠다. 이미 ESP8266 칩을 장착한 NodeMCU/WeMos 보드와 W5100 이더넷(Ethernet) 보드에서 다양한 코딩을 해보았으나 아무래도 성능 검증 작업이므로 스스로 짠 코드가 아닌 아두이노 오픈소스 바닥에 널려있는 에제중에서 딱 마음에 드는 코드가 없어 절충으로 이 예제들을 조합하여 적절한 예제 코드를 준비하였다. 코드 준비 및 배선, 실험 시간까지 합해 1시간 정도 소요하였다.
LOLIN 보드 WiFi 성능 실험 내용은 가변저항을 VP에 배선하였다. 전원 Vcc 는 Batt 단자에 0V는 GND에 배선 한다. VP아날로그 입력 핀은 36번에 해당하며 내부 코드에서 for looping에서 한 번씩 통과하게 코딩하였다. 나머지 코딩이 되지 않은 아날로그 핀에서도 뭔가 값이 출력되어 무선 WiFi를 통해 날라와 웹에 출력되는데 자세히 몇분간 째려보면 Random 한 값임을 알 수 있다. 즉 값이 슬슬 변한다는 점이다. 반면에 가변 저항이 연결된 핀의 값은 가변저항 돌리기 전에 변동이 있으면 안된다. 가변저항을 돌려 보면 그 범위가 0∼4095임을 알 수 있다. analogRead 명령을 사용하면 항상 + 값만 나오며 4095=2**12-1임을 알수 있다. 즉 0∼1023까지 10비트 데이터를 제공하는 아두이노 우노와는 달리 12비트임을 확인할 수 있다.
WiFi 실험을 위한 코드 준비 내용을 설명하기로 한다. LOLIN 보드의 WiFi 성능 확인을 위한 코드는 아두이노 편집기에서 흔하게 볼 수 있는 이더넷 예제의 WebServer 코드를 손보았다. WebServer 예제 코드는 유선 인터넷인 이더넷 보드에서 실행이 되는 우리가 알고 있는 통신 코드 중에서 가장 후줄그레한 코드이며 얘네 코드 실행이 잘되면 아무 코드나 다 된다는 의미로 볼 수 있을 것이다.
단 코드 수정을 간단히 하기 위해서 WeMos LOLIN 32 예제 메뉴 중에서 WiFi에 포한되어 있는 SimpleWiFiServer 의 헤더부분을 참고하였다. 여러분은 그 고생마저 할 필요가 없는듯하다. 수정해서 첨부된 코드를 살펴보면 될듯하다. 수정 내용은 NodeMCU/WeMos 보드 사용시 ESP8266WiFi.h 라이브러리를 사용하다가 LOLIN 보드에 와서는 WiFi.h 로 바꾸면 그만이며 수정할 내용이 거의 없다. 이 동네 업자들 특성이 손 안되고 코풀기 좋아하는 중국식 짝퉁으로 보면 될 것이다. EthernetServer 가 WiFiServer 로 바뀌는 정도며, mac address 따위는 필요 없는 듯하다. 자세히 살펴보면 ESP8266WiFi,h 라이브러리 명령이나 WiFi.h 라이브러리 명령이 동일한 듯한데 생각해 보니 ESP32 칩 제조하는 회사명이 Espresif로 ESP8266 칩 제조사와 동일한 회사인 듯하다.
그밖에 변경 내용으로서는 클라이언트로부터 request를 받은 후 LOLIN에서 송출해야 할 가변 저항의 값을 읽어들이는 anlogRead 명령의 핀 번호를 0∼5에서 32∼36으로 바꾸었다.
아무런 문제없이 잘 작동이 되었다. 다음 기회에는 조금씩 난이도를 올려 NodeMCU/WeMos 보드에서 작성한 코드 몇 가지를 시험해 보도록 할 예정이다.
첨부된 코드를 실행해 보기 바란다.
//WeMos_lolin_WebServer_01
#include <WiFi.h>
const char* ssid = "android1234";
const char* password = "dddddddddd";
WiFiServer server(80);
int value = 0;
void setup() {
Serial.begin(115200);
pinMode(5, OUTPUT); // set the LED pin mode
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(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.begin();
}
void loop() {
WiFiClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
//Serial.write(c);
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println("Refresh: 5");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// output the value of each analog input pin
for (int analogChannel = 32; analogChannel < 37; analogChannel++) {
//int analogChannel = 36;
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
Serial.println("client disconnected");
}
}//끝
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
WeMos LOLIN 3색 LED 밝기 조절 (0) | 2018.08.14 |
---|---|
WeMos LOLIN 보드에서 조도센서로 LED를 ON OFF해보자. (0) | 2018.08.06 |
WeMos LOLIN 클라이언트로 ThingSpeak에 DHT11 온습도 측정값을 전송하자. (0) | 2018.08.02 |
WeMos LOLIN 보드 DHT11 온습도 센서 측정 (0) | 2018.08.02 |
WeMos LOLIN 보드의 I2C lcd 및 OLED 디스플레이 출력 (0) | 2018.07.31 |