2016/Jun/12

วันก่อนอัพเกรดจาก Arduino 1.6.8 เป็น 1.6.9 เพื่ออยากจะลอง Serial Plotter แล้ว Compiling บอร์ด NodeMCU 1.0 (ESP-12E Module) ไม่ผ่าน ตามรูป

Error compiling for board NodeMCU 1.0 (ESP-12E Module)

Board nodemcuv2 (platform esp8266, package esp8266) is unknown

Error compiling for board NodeMCU 1.0 (ESP-12E Module).

แก้ไงก็ไม่หาย ลบโปรแกรมออก ลงใหม่ก็ไม่หาย เปลี่ยนเป็น Version เก่าก็ไม่หาย ไปอ่านเจอวิธีแก้ในเว็บ บอกให้ไปลบแฟ้มเก่าออกก่อน https://github.com/esp8266/Arduino/issues/1387 

ลองไปเปิดดูตามที่แนะนำ มี 2 แฟ้มจริงๆ ด้วย งั้นลบของเก่าทิ้งไป
C:\Users\EGAT\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266

เมื่อลบเสร็จลอง run ดู ผลใช้ได้แล้วครับ

 ขอบคุณ anhhuy0501 ที่ให้คำแนะนำใน https://github.com/esp8266/Arduino/issues/1387 

2016/Mar/24

Arduino Compatible Board  บางชนิด ที่จะนำมาใช้งานบางครั้งไม่ได้มี Port USB มาให้โหลดข้อมูล เช่น บอร์ด Arduino Pro Mini 328 - 5V/16MHz หรือ บอร์ด ESPresso Lite
   


จำเป็นจะต้องมี โมดูล USB TTL to UART ในการเชื่อมต่อเพื่อการ Upload คำสั่งจากที่เขียนบน Arduino IDE 

แต่เราจะทดสอบว่า โมดูล USB TTL to UART ที่เรามีอยู่นีใช้งานได้ปกติหรือไม่ .... 

วันนี้ได้คุณนรชัย (https://www.facebook.com/boop51d?fref=ufi) มาทดสอบและแนะนำการทดสอบ  โมดูล USB TTL to UART ด้วยวิธีง่ายๆ ดังนี้ 

  1. ทำการจั๊ม(เชื่อม) ขา RX กับ TX เข้าด้วยกัน  
  2. เสียบ โมดูล USB TTL to UART เข้ากับ USB Port ของ PC หรือ Notebook ของเรา
  3. เปิดโปรแกรม Arduino IDE ขึ้นมา ตรวจสอบดูว่ามีการเชื่อมต่อกับ COM port เรียบร้อย
  4. กดปุ่ม Serial Monitor 
  5. ลองป้อน อักษรลงไป แล้วกดปุ่ม Send 
  6. หากมี อักษรที่เราปรากฏขึ้นมาในหน้าต่าง แสดงว่า โมดูล USB TTL to UART นี้ใช้ รับ-ส่ง ข้อมูลได้ตามปกติ

จบแล้วครับวิธีทดสอบ โมดูล USB TTL to UART อย่างง่ายๆ ครับ 

ขอบคุณคุณนรชัย (บู๋) อีกครั้งที่แนะนำครับ คราวหน้ามาลองต่อกับบอร์ด Arduino กันครับ 

2016/Jan/05

6. การส่งค่าที่อ่านได้จาก DHT22 Sensor ไปเก็บบน funspark.com  (Board NodeMCU V.3 พร้อม ESP8266 Wi-Fi Module)

จากตอนที่ผ่านมา 4 ได้มีการต่อ DHT22 Sensor เพื่ออ่านค่าอุณหภูมิได้แล้ว และ ตอนที่ 5 ก็ได้ทดสอบ เชื่อมบอร์ดให้สามารถติดต่อสื่อสารไร้สายผ่าน Wi-Fi ของเราได้แล้ว คราวนี้เราก็จะมาทำการส่งค่า อุณหภูมิ (Temperature) และค่าความชื้น (Humidity) ที่อ่านได้จาก DHT22 Sensor ขึ้นไปเก็บยังบน  Server Cloud Service หรือที่เรียกกันว่า Internet of Things (IoT) ของ data.sparkfun.com ซึ่งเป็นบริการเก็บข้อมูลโปรเจค ฟรีๆ (ดีจริงๆ ขอบคุณมากครับ)

เริ่มต้นโดยการเปิดไปที่เว็บไซต์ของ data.sparkfun.com จากนั้นก็ให้เลือกไปที่ปุ่ม CREATE เพื่อทำการสร้าง Data stream บน data.sparkfun.com 

 

จากนั้นทำการกรอกข้อมูล เกี่ยวกับ stream ที่เราจะสร้างขึ้นมา ที่มีเครื่องหมาย * ต้องกรอกให้ครบ  
ที่สำคัญคือชื่อของ Field ในที่นี้เราจะเก็บค่า ลำดับของอุปกรณ์ DHT Sensor (dht_no) , อุณหภูมิ (temperature) และ ค่าความชื้น (humidity)

 

เมื่อกดปุ่ม Save แล้ว เราก็จะได้ฐานข้อมูลให้พร้อมที่จะใช้งานแล้วครับ

มาทำการทดสอบดูว่า ฐานข้อมูลบน data.sparkfun.com สามารถใช้งานได้หรือไม่ โดยการนำโค้ดตัวอย่าง (Example)  ไปวางบนเว็บเบราว์เซอร์แล้ว Run ดูครับ

จากนั้นให้ทำการเปิด Public Url ตาม  ก็จะเห็นข้อมูลที่ทดสอบปรากกในฐานข้อมูลแล้วครับ

NOTE :
*  เนื่องจากผมได้ลองใช้ Delete Key ตอนแรกเข้าใจว่าเป็นการลบข้อมูลเฉยๆ  กลายเป็นว่าไปลบ ฐานข้อมูลที่สร้างไว้ เลยต้องทำฐานข้อมูลขึ้นมาใหม่ครับ คราวนี้ตัด dht_no ออกไปครับ  
** หากต้องการลบเฉพาะข้อมูลให้เลือกที่ปุ่ม Manage แล้วเข้าไป Clear แทนครับ 

 

ต่อไปก็มาทำการเขียนโค้ด

#include <DHT.h>

#include <ESP8266WiFi.h>

#define DHTPIN D1

#define LEDOnboard D4

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

const char* ssid     = "g-service-true";    

const char* password = "aaaaaaaaaa"; 

const char* host = "data.sparkfun.com";   

//data spart fun view : https://data.sparkfun.com/streams/dZLN9YlVLaiZpzl6Gl0a

//analog.io show graph  https://analog.io/s3ZY

const char* streamId   = "dZLN9YlVLaiZpzl6Gl0a"; // Public Key

const char* privateKey = "eEo9JDydowhR51wjMwy9"; // Private Key

//deleteKey = "l38b9QZe8xiG6wpEOpo5"; // Delete Key

void setup()

{

    digitalWrite(D4,LOW);  // LED Builtin ดับขณะเริ่มต้น

    Serial.begin(9600);   

    delay(10);

    Serial.println();

    Serial.println();

    Serial.print("Connecting to "); //แสดงข้อความ  “Connecting to”

    Serial.println(ssid);       //แสดงข้อความ ชื่อ SSID

    WiFi.begin(ssid, password); // เชื่อมต่อไปยัง AP

    while (WiFi.status() != WL_CONNECTED)   //รอจนกว่าจะเชื่อมต่อสำเร็จ

{

            delay(500);

            Serial.print(".");

    }

  Serial.println("");

  Serial.println("WiFi connected");   //แสดงข้อความเชื่อมต่อสำเร็จ 

  Serial.println("IP address: ");  

  Serial.println(WiFi.localIP());   //แสดงหมายเลข IP ของ ESP8266(DHCP)

  pinMode(LEDOnboard,OUTPUT);

  dht.begin();

}

int value = 0;

void loop() {

  ++value;

  Serial.print("connecting to ");

  Serial.println(host);

  

  // Use WiFiClient class to create TCP connections

  WiFiClient client;

  const int httpPort = 80;

  if (!client.connect(host, httpPort)) {

    Serial.println("connection failed");

    return;

  }

  float h = dht.readHumidity();

  float t = dht.readTemperature();

  if (isnan(t) || isnan(h))

  {

  Serial.println("Error reading DHT!");

  }

  else

  {

  digitalWrite(D4,HIGH);  // LED Builtin ติดเมื่อเริ่มส่งข้อมูล

  Serial.print("Humidity: ");

  Serial.println(h);

  Serial.print("Temp: ");

  Serial.println(t);

   }  

  // We now create a URI for the request

  // https://data.sparkfun.com/input/YGLG5gG75XhZVwnX7mDr?private_key=RbDbmzbAmwuloN4gR1MD&dht_no=25.06&humidity=20.66&temperature=4.78

  String url = "https://data.sparkfun.com/input/";

  url += streamId;

  url += "?private_key=";

  url += privateKey;

  url += "&humidity=";

  url +=  h ;

  url += "&temperature=";

  url +=  t ;    

  Serial.print("Requesting URL: ");

  Serial.println(url);

  // This will send the request to the server

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +

               "Host: " + host + "\r\n" +

               "Connection: close\r\n\r\n");

  delay(10);

  // Read all the lines of the reply from server and print them to Serial

  while(client.available()){

    String line = client.readStringUntil('\r');

    Serial.print(line);

  }

  Serial.println();

  Serial.println("closing connection");

  digitalWrite(D4,LOW);  // LED Builtin ดับเมื่อส่งข้อมูลเรียบร้อยแล้ว

  delay(60000);

}


ทดสอบ Run ดู

 

ใช้งานได้แล้วครับ ค่า timestamp ระบบจะใส่ให้เองอัตโนมัติ ไม่รู้ว่าทำไงให้เป็น GMT+7
ลองกดปุ่ม Export to Analog.io ดูครับ

ในหน้าต่างของ analog.io ให้เลือก หน้าข้อมูลที่ต้องการให้แสดงกราฟ  กดปุ่ม Load All (ครั้งแรก ครั้งต่อไปจะเป็น ปุ่ม Refresh)

 

จบแล้วครับ สามารถใช้งาน DHT22 Sensor และทำการส่งค่าขึ้น IoT ของ sparkfun.com ผ่าน Wi-Fi ที่บ้านได้แล้วครับ

edit @ 5 Jan 2016 21:04:54 by BigTUI ^_^

edit @ 15 Mar 2016 20:11:13 by BigTUI ^_^

2016/Jan/03

5. การเรียกใช้งาน Wi-Fi Module เชื่อมต่อกับ Access Point ที่บ้าน อาจจะเรียก Wi-Fi Router ก็แล้วแต่สะดวกนะครับ
(Board NodeMCU V.3 พร้อม ESP8266 Wi-Fi Module)

เนื่องด้วยตัวบอร์ดทั้งของ NodeMCU V.2 กับ LoLin V.3 มี Module ESP8366 Wi-Fi ติดมาด้วย เราจึงสามารถใช้เชื่อมต่อกับ Access Point ที่บ้านเราได้เลยมาครับ

เริ่มต้นด้วยการไปเปิดไฟล์ตัวอย่าง ที่มาพร้อมกับระบบ โดยเปิดใช้ไฟล์ WiFiClient

จากนั้นทำการแก้ไข ชื่อ SSID ของ Wi-Fi ที่จะเชื่อมต่อ (1) และ เปลี่ยนรหัสผ่านให้ถูกต้อง (2)

ตัวอย่างการแก้ไข SSID และ Password เพื่อใช้เชื่อมต่อกับ Wi-Fi ที่บ้านเราครับ

จากนั้นผมก็ตัดข้อความที่ไม่ได้ใช้งานออก จะได้เห็นโค้ดเต็มๆ ครับ

#include <ESP8266WiFi.h>
const char* ssid = "g-service-true";
const char* password = "aaaaaaaaaa";
void setup() {
Serial.begin(115200);
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());
}
void loop() {
delay(2000);
}

 

ถ้า SSID กับ password ถูกต้องก็จะแสดงคำว่า WiFi connected และ แสดง IP Address ที่ได้รับแจกจาก Access point ครับ ลองใช้ PC หรือ Notebook แล้วพิมพ์คำสั่ง ping IP Address ของ NodeMCU  ก็จะเห็นว่าสามารถติดต่อได้

จบแล้วครับ

เพิ่มเติม กรณีที่ต้องการให้แสดงผลค่า MAC Address ของอุปกรณ์ใช้คำสั่ง WiFi.macAddress() ต่อจากชุดคำสั่งที่ให้แสดง IP Address นะครับ 
 

Serial.println(WiFi.localIP());
Serial.println(WiFi.macAddress()); 


 

edit @ 15 Mar 2016 19:53:08 by BigTUI ^_^

2015/Dec/29

4. การใช้งาน DHT22 Humidity and Temperature Sensor (Board NodeMCU v.2 พร้อม ESP8266 wi-fi Module)

หลังจากที่ลอง บอร์ด Board NodeMCU V.3 พร้อม ESP8266 wi-fi Module กันมาแล้วคราวนี้เรามาลองให้ทำการอ่านค่าจาก DHT22 Humidity and Temperature Sensor กันดีกว่า 

อุปกรณ์ DHT22 Humidity and Temperature Sensor หน้าตาก็เป็นแบบนี้ครับ

  

ใครต้องการดู Data sheet ก็เข้าไปอ่านได้จาก http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf 

ต่อวงจรง่ายๆ ตามรูปเลยครับ 

จากนั้นก็ทำการ Donload Driver ของ DHT22 จากเว็บไซต์ https://github.com/adafruit/DHT-sensor-library 

เอามาติดตั้งในแฟ้ม C:\Program Files (x86)\Arduino\libraries 
** directory ขึ้นอยู่กับว่าท่่านติดตั้งที่ไหนนะครับ แต่อยู่ในแฟ้ม libraries เปลี่ยนชื่อแฟ้มให้เป็น DHT 

กำหนดให้ใช้ DHT Library DHT Sersor

จากนั้นก็คัดลอก Code ลงไป 

เปิด Serial Monitor แล้ว ลอง Run ดูครับ 

ผลการทดลอง สามารถอ่านค่าได้เป็นที่น่าพอใจครับ ขอจบ การทดลองที่ 4 ไปก่อนนะครับ คราวหน้ามาเจอกันใหม่ 

edit @ 29 Dec 2015 19:30:10 by BigTUI ^_^

เพิ่มเติมครับ กรณีที่เป็น DHT11 

  

เราก็เพียงแต่เปลี่ยน จาก DHT22 เป็น DHT11 เท่านั้นเองครับ 

ผลปรากฏว่าใช้ได้ สามารถอ่านค่าอุณหภูมิ กับ ค่าความชื้นได้เหมือนกัน


โค้ด : 

#include <DHT.h>
#define DHTPIN D1
#define LEDOnboard D4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
pinMode(LEDOnboard,OUTPUT);
Serial.begin(115200);
dht.begin();
}
void loop()
{
digitalWrite(D4,LOW);
delay(2000);
digitalWrite(D4,HIGH);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(t) || isnan(h))
{
Serial.println("Error reading DHT!");
}
else
{
Serial.print("Humidity: ");
Serial.println(h);
Serial.print("Temp: ");
Serial.println(t);
}
delay(2000);
}

 

edit @ 4 Jan 2016 14:07:06 by BigTUI ^_^



ศรีเดช ปัญจขันธ์
View full profile