Lesson 22 : ควบคุม LED-RGB ผ่านเว็บไซต์

เป็น Coding เบื้องต้นในการส่งค่า RGB ผ่าน NodeMCU ไปควบคุมหลอด LED นะครับ

ระดับความยาก :  

อุปกรณ์
ลำดับ ชิ้นส่วน จำนวน
1 Node MCU V3 1 ชิ้น
2 LED-RGB 1 ชิ้น
3 ตัวต้านทานขนาด 330 โอม 3 ชิ้น

1. ต่อวงจรกันเลย

2. Download Code โดยคลิกที่นี่ ครับ

3. เมื่อ Upload Code เข้า board เรียบร้อยแล้วให้ลองต่อไปที่ Access Point ที่เรากำหนดไว้ใน Code ครับ
ถ้าตามตัวอย่างจะเป็นเสา Wifi ชื่อว่า THEMAKERESP ครับ โดยมี Password เป็น 123456789

4. เมื่อต่อได้แล้วให้ลองเปิด Browser ขึ้นมาครับ และลองเข้าไปที่ URL 192.168.4.1 ครับ จะได้หน้าจอดังภาพด้านล่าง
ให้ลองใส่ค่า 0 หรือ 255 แล้วลองดูสีที่ LED นะครับ
*ในบทความนี้ผมใช้ DigitalWrite ทำให้กำหนดสีได้น้อยกว่า ซึ่งเมื่อเราทำได้แล้วสามารถเปลี่ยนเป็น AnalogWrite ได้นะครับจะทำให้ผสมสีได้ละเอียดขึ้นครับ

5. ผลการทำงานได้ตาม Video นี้นะครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

วิธีการใช้งาน JSON ใน Arduino

1. Install Library ‘ArduinoJson’ ก่อนครับ

2. ตัวอย่างโค้ดตามนี้ครับ

2.1 เรียกใช้ Library ด้วยคำสั่ง
#include

2.2 ประกาศตัวแปรไว้รับค่าการแตก Json
StaticJsonDocument<200> doc;

2.3 ใช้งานได้เลย ดูในรูปที่แนบมานะครับ ไม่ยากครับ

Lesson 20 : เล่นกับแสงเลเซอร์กัน

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Node MCU V31 ชิ้น
2High Level Laser Receiver Non-modulator Tube Sensor Module1 ชิ้น
3โมดูลเลเซอร์สีแดง 650nm (650nm Laser sensor Module)1 ชิ้น

1. ต่อวงจรกันเลย
1.1 ต่ออุปกรณ์ภาครับเลเซอร์ดังรูปนี้ครับ (ต่อด้วยความระมัดระวังนะครับ)

สังเกตุสายไฟสีนน้ำเงิน สีเหลือง สีขาว ต้องเรียงลำดับตามนี้เลยนะครับ ไม่เช่นนั้นไฟอาจลัดวงจรได้ครับ

1.2 ภาคยิงเลเซอร์ ต่อดังนี้ครับ (input ผมต่อเข้าขา D0 ของ NodeMCUV3)

1.3 ภาครับเลเซอร์ต่อวงจรดังนี้ครับ (Out ผมต่อเข้าขา D1 ของ NodeMCUV3 นะครับ)

2. Copy Code นี้นำไปใช้ได้เลยครับ

/**
@desc Class for laser receiver and shooter module
@author Prayoon V.,
Email : themakerthailand@hotmail.com
Facebook : @MrMakerThailand
.
*/

void setup() {
pinMode(D0, OUTPUT);
pinMode(D1, INPUT);
Serial.begin(9600);

}
void loop() {
digitalWrite(D0, HIGH);
Serial.println(“laser shoot”);
boolean val = digitalRead(D1);
Serial.println(val);
delay(3000);
digitalWrite(D0, LOW);
Serial.println(“laser stop”);
delay(10000);
}

3. เมื่อ Run Code แล้วจะเห็นผลการทำงานเมื่อแสงเลเซอร์ยิงถูกตัวรับแสงจะได้รับ Message ผ่าน Serial เป็นค่า 1 และหากยิงไม่โดนจะได้ค่าเป็น 0 ดังภาพนี้ครับ

แสดงข้อมูลจาก Serial Monitor จะเห็นว่าเลเซอร์จะยิงค้างไว้ 3 วินาที และแสดงเลข 0 เมื่อไม่โดนภาครับแสง แสดงเลข 1 เมื่อยิงถูกภาครับเลเซอร์

ทดลองกั้นระหว่างภาครับและภาคส่งเลเซอร์ Serial Monitor จะแสดงเลข 0

หากยิงเลเซอร์เข้าที่ภาครับ(สังเกตุที่จุดสีแดง) Serial Monitor จะแสดงเลข 1

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

แก้ปัญหาเมื่อไม่สามารถ Upload Code เข้า ESP8266

แก้ปัญหาในกรณีที่ Upload Code ขึ้น Board ไม่ได้ หาก Board ของท่านขึ้น Error นี้

กรณี NODEMCU ให้ลองแก้ปัญหาดังนี้

1. ตรวจสอบ Driver CH340G ว่าติดตั้งแล้วหรือยัง หากยังไม่ได้ติดตั้งให้ download file นี้และ setup ดูครับ

2. เปลี่ยนประเภทของ Board เป็น NodeMCU V1.0 และทดลอง Upload ใหม่

3. ดู Port ที่เสียบสาย USB ให้ถูกต้องครับ

กรณี ESP01 ให้ลองแก้ปัญหาดังนี้

1.เตรียม Library ให้ Arduino IDE รู้จักกับ Module ESP8266 ก่อนโดยเมื่อเปิด Aruino IDE ขึ้นมาแล้วให้เลือกที่เมนู File -> Preferences ดังภาพที่ 1

2. ที่ช่อง Additional Boards Manager URL ให้ใส่ค่า “http://arduino.esp8266.com/stable/package_esp8266com_index.json” จากนั้นกดปุ่ม OK ดังภาพ

3. ทำการ Install Board โดยคลิกที่ Tools -> Baords -> Board Managers… ระบบจะเปิดหน้าต่าง Board Manager ขึ้นมา

4. ที่หน้าต่าง Boards Manager ให้เลื่อนหา Board ที่ชื่อว่า ESP8266 จากนั้นกดปุ่ม Install ดังภาพ

5. เมื่อ Install เรียบร้อย Arduino IDE ของเรา ก็จะมีLibrary เกี่ยวกับ Board ESP8266 มาให้เราเลือกใช้ ดังภาพ

หากยังไม่ได้ลองทำดังนี้
6. ลองถอดสาย VCC ออกจาก Board ESP8266 และกด Upload จากนั้นเสียบสาย VCC เข้า Board ESP8266 จากนั้นกดปุ่ม Upload

7. ลองถอดสาย VCC ออกจาก Board ESP8266 จากนั้นเปิดหน้าต่าง IDE ใหม่ โดยให้เปิด Code Blink จากเมนู File-> Examples-> 01. Basic -> Blink กดปุ่ม Upload ผลที่ได้จะ Error เหมือนเดิมไม่ต้องสนใจครับ ให้เสียบสาย VCC เข้า Board ESP8266 เหมือนเดิมและย้อนมาที่หน้าต่าง IDE ของเราจากนั้นกดปุ่ม Upload ดูครับ

หากยังทำไม่ได้ ลองถ่ายรูป Error และส่งมาที่ Inbox ของ Facebook MrMakerThailand ครับ ผมกับทีมงานจะเข้าไปแก้ปัญหาให้ครับ

Lesson 19 : ก้าวเข้าสู่ IOT – ตอนที่ 9 IFTTT และ Google Sheet

ส่งข้อมูลจาก NodeMCU V3 ไปบันทึกที่ Google Sheet

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1ESP8266 (NodeMCUV3)1 ชิ้น
2Light sensor 1 ชิ้น

เริ่ม Coding กันเลย!!!
1. สมัครใช้งานก่อนที่เว็บไซต์ https://ifttt.com/

2. เมื่อสมัครใช้งานแล้วระบบจะ login ให้อัตโนมัติ ให้คลิกที่ My Applets และคลิกที่ New Applet เพื่อเริ่มต้นใช้งาน

3. ระบบจะแสดงหน้าจอดังภาพนี้ ให้คลิกที่อักษรสีฟ้าที่เขียนว่า this เพื่อกำหนดเหตุการณ์(Trigger) ที่จะเป็นจุดกำเนินของการแจ้งเตือน

4. สำหรับกรณีนี้เราจะให้ Trigger จาก Arduino และส่งข้อมูลไปที่ Line Notify ดังนั้นให้เรา Search คำว่า Webhooks เป็น Applet ตัวหนึ่งที่ IFTTT เตรียมไว้ให้ Developer ใช้

5. เมื่อเลือกที่ Webhooks แล้วให้คลิกที่ Connect

6. ระบบจะ Connect ไปที่ Server และแสดง Applet ให้เราเลือก ซึ่งปัจจุบันจะมีตัวเดียวคือ “Receive a web request” ให้คลิกเลือกได้เลย

7. กำหนด Event Name เป็น button_Pressed จากนั้นกดปุ่ม Create Tigger

8. ระบบจะย้อนมาที่หน้าหลักเพื่อให้เราสร้าง Action ให้คลิกเลือก that

9. ให้ค้นหาด้วยคำว่า Google และเลือกเข้าไปใน Google Drive

10. ระบบจะเปิดหน้าต่างให้เลือก Action ว่าเราจะทำอะไรให้เราเลือก “Add row to spreadsheet”

11. ระบบจะเปิดหน้าต่างให้กำหนดค่าต่าง ๆ ที่จะบันทึกลงใน Google Sheet เบื้องต้นเรากำหนดแค่ Spreadsheet name กับ Path ก็พอครับ (เมื่อใช้งานได้แล้วเราค่อยมาปรับเพิ่มตามที่เราต้องการครับ) จากนั้นกด Create Action

12. ระบบจะเปิดหน้าต่างให้เรายืนยันการสร้าง Applet ให้เรากดปุ่ม Finish

13. ทดสอบ Applet ที่เราสร้างด้วยการค้นหา Webhook และคลิกเข้าไปได้เลยครับ

14. ระบบจะเปิดหน้าต่างหลักของ Webhook ให้คลิกที่ปุ่ม Documentation

15. ระบบจะเปิดหน้าต่างสำหรับทดสอบ Applet ให้ระบุข้อมูลต่าง ๆ และกด Test It (ช่อง Value ใส่ค่าที่ท่านต้องการได้เลยครับ)

19. ระบบจะแสดงข้อความว่าได้ส่งข้อมูลเรียบร้อยแล้ว

20. ที่ Google Sheet จะมีข้อความที่เราทดสอบ มาแสดงครับ

21. เมื่อถึงขั้นตอนนี้ระบบ Trigger ผ่าน IFTTT เราพร้อมแล้วครับ สามารถส่งข้อมูลจาก NodeMCUv3 มาได้เลยครับ

22. ต่อวงจรดังภาพนี้ครับ
*Code นี้ผมต่อ Relay ด้วย สามารถประยุกต์การทำงานให้เป็นการ Detect แสงแล้วให้เปิดไฟได้ครับ

23. Download Code นี้และนำไปใช้ได้เลยครับ

/**
@desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, ESP8266
รวมทั้งการใช้งาน IOT เพื่อส่งค่าให้ Google Sheet ผ่าน IFTTT
@author Prayoon V.,
Email : themakerthailand@hotmail.com
Facebook : @MrMakerThailand
.
*/#include
#include
//#include

const char* ssid = “AccessPoinName”;
const char* password = “password”;

const char* mqttServer = “192.168.1.102”;
const int mqttPort = 1883;

WiFiClient espClient;
PubSubClient client(espClient);
//Pin ที่ต่อไฟ LED
const int led = D4;

//Pin ที่ต่อ Light Sensor
const int light = 0;

//configulation for IFTTT
const char* host = “maker.ifttt.com”;
const char *privateKey = “yourkey”;
const char *event = “gotData”;
String value1, value2, value3;
String postData = “”;
String MachineID=”A01″;

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
//pinMode(light, INPUT);

//ESP.restart();

//สั่งให้ไฟดับก่อน
digitalWrite(led, LOW);

//เชื่อมต่อ wifi
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println(“Connecting to WiFi..”);
}

Serial.println(“Connected to the WiFi network”);

//connect ไปที่ mqtt broker
client.setServer(mqttServer, mqttPort);

//กำหนด function เมื่อมีการส่งข้อมูลมาจาก MQTT
client.setCallback(callback);

while (!client.connected()) { //วนลูปจนกว่าจะต่อสำเร็จ
Serial.println(“Connecting to MQTT…”);

if (client.connect(“ESP8266Client” )) { //Connect to MQTT และกำหนดชื่อในการติดต่อ

Serial.println(“connected”);

} else {

Serial.print(“failed with state “);
Serial.print(client.state());
delay(2000);

}
}

//รอรับค่าที่โดนส่งกลับมาจาก MQTT Broker
client.subscribe(“esp/lightSwitch”);

}

//เมื่อมีข้อมูลกลับมาจาก MQTT จะโดนส่งกลับมาที่ Method นี้
void callback(char* topic, byte* payload, unsigned int length) {

Serial.print(“Message arrived in topic: “);
Serial.println(topic);

Serial.print(“Message:”);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);

//หาก message ที่ส่งกลับมามีค่าเป็น 0 ที่ array index ที่ 10 จะสั่งให้ไฟดับ เช่น {‘hello’:’0′}
//หาก message ที่ส่งกลับมาเป็น 1 จะสั่งให้ไฟติด เช่น {‘hello’:’1′}
//ตรงนี้แล้วแต่เราจะกำหนดครับ แต่ผมอยากทำให้ง่าย ๆ ก่อนเลยใช้วิธีการ fix ค่าไว้ครับ
if (i == 10) {
if ((char)payload[i] == ‘0’) { //turn off light
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
}
}

Serial.println();
Serial.println(“———————–“);

}

void loop() {
client.loop();

delay(5000);
//read the input on analog
int sensorValue = analogRead(A0);

sendMessageToIFTTT(sensorValue);
sendLightSensorToMQTT(sensorValue);
}

void sendLightSensorToMQTT(int sensorValue){
char tempstring[20];
dtostrf(sensorValue,3,1,tempstring);

client.publish(“esp/light”, tempstring);
}

//ส่งข้อมูล Alert ไปที่ IFTTT
void sendMessageToIFTTT(int sensorValue) {

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println(“connection failed”);
return;
}

// We now create a URI for the request
String url = “/trigger/”;
url += event;
url += “/with/key/”;
url += privateKey;

value1 = MachineID;
value2 = String(sensorValue);
value3 = “-“;

genJSonObject();

Serial.print(“Requesting URL: “);
Serial.println(url);
Serial.println(postData);

// This will send the request to the server
client.print(String(“GET “) + url + ” HTTP/1.1\r\n” +
“Host: ” + host + “\r\n”);

client.println(“Content-Type: application/json”);
client.print(“Content-Length: “);
client.println(postData.length());
client.println();
client.println(postData);
client.println(“Connection: close\r\n\r\n”);

// Read all the lines of the reply from server and print them to Serial,
// the connection will close when the server has sent all the data.
while (client.connected())
{
if (client.available())
{
String line = client.readStringUntil(‘\r’);
Serial.print(line);
} else {
// No data yet, wait a bit
delay(50);
};
}

// All done
Serial.println();
Serial.println(“closing connection”);

client.stop();
}

/**
ต่อค่า Value1-3 เป็น Json Object
*/
void genJSonObject()
{
postData = “{“;

postData.concat(“\”value1\”:\””);
postData.concat(value1);

postData.concat(“\”,”);
postData.concat(“\”value2\”:\””);
postData.concat(value2);

postData.concat(“\”,”);
postData.concat(“\”value3\”:\””);
postData.concat(value3);

postData.concat(“\”}”);
}

24. เมื่อ Run Code แล้วข้อมูลค่าแสงก็จะถูกส่งไปที่ Google Sheet ดัง Video นี้ครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 18 : ก้าวเข้าสู่ IOT – ตอนที่ 8 IFTTT และ Line Notify

ในการส่งข้อมูลจาก Aruino ไปที่ Line มีหลายวิธีนะครับ วันนี้ขอแนะนำการส่งผ่าน IFTTT Platform ครับ

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1ESP8266 (NodeMCUV3)1 ชิ้น

เกริ่นนำ IFTTT เป็นบริการสำหรับการเชื่อมต่อ Service ต่างๆ เข้าด้วยกันโดย End-User สามารถกำหนด Trigger หรือเหตุการณ์และสั่งให้ IFTTT ช่วยทำ Action ใดๆ ก็ได้ ซึ่ง Trigger ต่างๆ ในระบบ IFTTT นั้นเราจะเรียกมันว่า Applet นะครับ

ตัวอย่าง

เริ่ม Coding กันเลย!!!
1. สมัครใช้งานก่อนที่เว็บไซต์ https://ifttt.com/

2. เมื่อสมัครใช้งานแล้วระบบจะ login ให้อัตโนมัติ ให้คลิกที่ My Applets และคลิกที่ New Applet เพื่อเริ่มต้นใช้งาน

3. ระบบจะแสดงหน้าจอดังภาพนี้ ให้คลิกที่อักษรสีฟ้าที่เขียนว่า this เพื่อกำหนดเหตุการณ์(Trigger) ที่จะเป็นจุดกำเนินของการแจ้งเตือน

4. สำหรับกรณีนี้เราจะให้ Trigger จาก Arduino และส่งข้อมูลไปที่ Line Notify ดังนั้นให้เรา Search คำว่า Webhooks เป็น Applet ตัวหนึ่งที่ IFTTT เตรียมไว้ให้ Developer ใช้

5. เมื่อเลือกที่ Webhooks แล้วให้คลิกที่ Connect

6. ระบบจะ Connect ไปที่ Server และแสดง Applet ให้เราเลือก ซึ่งปัจจุบันจะมีตัวเดียวคือ “Receive a web request” ให้คลิกเลือกได้เลย

7. กำหนด Event Name เป็น button_Pressed จากนั้นกดปุ่ม Create Tigger

8. ระบบจะย้อนมาที่หน้าหลักเพื่อให้เราสร้าง Action ให้คลิกเลือก that

9. ให้ค้นหาด้วยคำว่า Line และเลือก Line Application ได้เลยครับ

10. จากนั้นให้คลิก Connect ระบบจะเปิดหน้าต่างให้ใส่ Username / Password ของ Line ให้เรากรอก Line Account ของเราครับ

11. ระบบจะขออนุญาตเพิ่ม Line Notify เข้าไปในเพื่อนของคุณ ให้กดปุ่ม Agree and connect ครับ

12. ระบบจะแสดง Applet ที่สามารถใช้งานได้ ให้คลิกเลือกที่ Applet Send Message

13. จากนั้นระบบจะเปิดหน้าจอให้ระบุข้อมูลต่าง ๆ ให้เลือก
• Recipient เป็น 1-On-1 Chat With LINE Notify
• Message กำหนดเป็นค่าดังนี้ “Message from {{EventName}}, your value is {{Value2}} and {{Value3}} occurred at {{OccurredAt}}” หรือจะไม่แก้ไขเลยก็ได้ครับ
• จากนั้นกด Create Action

14. ระบบจะแสดงหน้าจอสรุปอีกครั้งเป็นรอบสุดท้าย ให้เราตรวจสอบอีกครั้งหากถูกต้องแล้ว กดปุ่ม Finish

15. ระบบจะแสดงหน้าจอสรุปว่า Applet ได้เริ่มใช้งานแล้ว สามารถทดลองสถานะด้วยการกดปุ่ม Check now ระบบจะขึ้นข้อความ Applet Checked

*ผล Applet checked

16. จากขั้นตอนนี้จะทดลองว่า Applet ที่เราสร้างขึ้นมาใช้ได้หรือไม่โดยให้คลิกที่สัญญาลักษณ์ Webhook ตามภาพนี้ครับ

17. ระบบจะเปิดหน้าต่างหลักของ Webhook ให้คลิกที่ปุ่ม Documentation

18. ระบบจะเปิดหน้าต่างสำหรับทดสอบ Applet ให้ระบุข้อมูลต่าง ๆ และกด Test It (ช่อง Value ใส่ค่าที่ท่านต้องการได้เลยครับ)

19. ระบบจะแสดงข้อความว่าได้ส่งข้อมูลเรียบร้อยแล้ว

20. ที่ Line Application ของเราก็จะมี Message มาแสดงครับ

21. เมื่อถึงขั้นตอนนี้ระบบ Trigger ผ่าน IFTTT เราพร้อมแล้วครับ สามารถส่งข้อมูลจาก Arduino มาได้เลยครับ

22. ผมใช้ NodeMCUv3 ก็จะไม่ได้มีการต่อวงจรนะครับ ผมจะจำลองข้อมูลส่งไปเท่านั้น ดังนั้นสามารถใช้ Sensor ต่าง ๆ ต่อที่ NodeMCUv3 และส่งค่าไปได้นะครับ

23. Download Code นี้และนำไปใช้ได้เลยครับ

/**
@desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, ESP8266
รวมทั้งการใช้งาน IOT เพื่อส่งค่าให้ Line Notify ผ่าน IFTTT
@author Prayoon V.,
Email : themakerthailand@hotmail.com
Facebook : @MrMakerThailand
.
*/

#include
#include
//#include

const char* ssid = “access point name”;
const char* password = “password”;

const char* mqttServer = “192.168.1.102”;
const int mqttPort = 1883;
//const char* mqttUser = “mqtt broker username”;
//const char* mqttPassword = “mqtt broker password”;

WiFiClient espClient;
PubSubClient client(espClient);

//HTTPClient http;

//Pin ที่ต่อไฟ LED
const int led = 2;

//Pin ที่ต่อ Light Sensor
const int light = 0;

unsigned long previousMillis = 0;
unsigned long interval = 10000;

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
//pinMode(light, INPUT);

//ESP.restart();

//สั่งให้ไฟดับก่อน
digitalWrite(led, LOW);

//เชื่อมต่อ wifi
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println(“Connecting to WiFi..”);
}

Serial.println(“Connected to the WiFi network”);

//connect ไปที่ mqtt broker
client.setServer(mqttServer, mqttPort);

//กำหนด function เมื่อมีการส่งข้อมูลมาจาก MQTT
client.setCallback(callback);

while (!client.connected()) { //วนลูปจนกว่าจะต่อสำเร็จ
Serial.println(“Connecting to MQTT…”);

if (client.connect(“ESP8266Client” )) { //Connect to MQTT และกำหนดชื่อในการติดต่อ

Serial.println(“connected”);

} else {

Serial.print(“failed with state “);
Serial.print(client.state());
delay(2000);

}
}

//ส่งข้อมูล publish ไปที่ MQTT Broker โดยตั้ง topic เป็น “esp/test”
client.publish(“esp/test”, “Hello from ESP8266”);
//subscribe topic “esp/test”
client.subscribe(“esp/test”);

//ส่งข้อความไปที่ IFTTT
sendMessageToIFTTT();

//กระพริบไฟให้สัญญานว่าทำงานได้
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);

}

//เมื่อมีข้อมูลกลับมาจาก MQTT จะโดนส่งกลับมาที่ Method นี้
void callback(char* topic, byte* payload, unsigned int length) {

Serial.print(“Message arrived in topic: “);
Serial.println(topic);

Serial.print(“Message:”);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);

//หาก message ที่ส่งกลับมามีค่าเป็น 0 ที่ array index ที่ 10 จะสั่งให้ไฟดับ เช่น {‘hello’:’0′}
//หาก message ที่ส่งกลับมาเป็น 1 จะสั่งให้ไฟติด เช่น {‘hello’:’1′}
//ตรงนี้แล้วแต่เราจะกำหนดครับ แต่ผมอยากทำให้ง่าย ๆ ก่อนเลยใช้วิธีการ fix ค่าไว้ครับ
if (i == 10) {
if ((char)payload[i] == ‘0’) { //turn off light
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
}
}

Serial.println();
Serial.println(“———————–“);

}

void loop() {
client.loop();

delay(10000);
sendMessageToIFTTT();
}

const char* host = “maker.ifttt.com”;
const char *privateKey = “ใส่ค่า Key จาก IFTTT”;
const char *event = “ใส่ค่า Event ที่กำหนดใน IFTTT”;
String value1, value2, value3;
String postData = “”;

//ส่งข้อมูล Alert ไปที่ IFTTT
void sendMessageToIFTTT() {

// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println(“connection failed”);
return;
}

// We now create a URI for the request
String url = “/trigger/”;
url += event;
url += “/with/key/”;
url += privateKey;

value1 = “themaker”;
value2 = “555”;
value3 = “999”;

genJSonObject();

Serial.print(“Requesting URL: “);
Serial.println(url);
Serial.println(postData);

// This will send the request to the server
client.print(String(“GET “) + url + ” HTTP/1.1\r\n” +
“Host: ” + host + “\r\n”);

client.println(“Content-Type: application/json”);
client.print(“Content-Length: “);
client.println(postData.length());
client.println();
client.println(postData);
client.println(“Connection: close\r\n\r\n”);

// Read all the lines of the reply from server and print them to Serial,
// the connection will close when the server has sent all the data.
while (client.connected())
{
if (client.available())
{
String line = client.readStringUntil(‘\r’);
Serial.print(line);
} else {
// No data yet, wait a bit
delay(50);
};
}

// All done
Serial.println();
Serial.println(“closing connection”);

client.stop();
}

/**
ต่อค่า Value1-3 เป็น Json Object
*/
void genJSonObject()
{
postData = “{“;

postData.concat(“\”value1\”:\””);
postData.concat(value1);

postData.concat(“\”,”);
postData.concat(“\”value2\”:\””);
postData.concat(value2);

postData.concat(“\”,”);
postData.concat(“\”value3\”:\””);
postData.concat(value3);

postData.concat(“\”}”);

}

24. เมื่อ Run Code แล้วก็จะได้รับข้อความใน Line Notify ดังภาพนี้ครับ

หลังจากจบบทความนี้ผมคิดว่า เราน่าจะส่ง Alert Message จาก Arduino มาที่ Line ผ่าน IFTTT ได้แล้ว บทความต่อไปผมจะแนะนำการรับคำสั่งเข้า Arduino กันบ้างนะครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 17 : ก้าวเข้าสู่ IOT – ตอนที่ 7 Node-RED ต่อ MQTTBroker

ใน Series ของ Node-RED ผมจะแนะนำการใช้งานทั้งหมด 3 บทความโดยจะเริ่มต้นจาก
1. ทำความเข้าใจและการติดตั้ง Node-RED
2. เริ่มเขียนโปรแกรมบน Node-RED รวมถึงการทำ Email Alert
3. การเชื่อมต่อระหว่าง Node-RED และ MQTT Broker

บทความนี้เป็นตอนที่ 3 นะครับ จะเป็นการรับส่งข้อมูลระหว่าง Node-RED และ MQTT Broker ครับ จบจากบทความนี้เราจะทำ IOT ที่บ้านได้ด้วยต้นเองแล้วครับ 😀

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์
ลำดับ ชิ้นส่วน จำนวน
1 Notebook หรือ Computer ติดตั้ง – Android Studio สำหรับในบทความนี้ใช้ Version 2.3 – MQTT Broker – Node-RED Server 1 เครื่อง

เริ่ม Coding กันเลย!!!
1. ให้ลาก Node MQTT จาก Input มาวางใน Flow 1 และลากเส้นเชื่อมโยงระหว่าง Node ไปที่ Output 3 ตัว ดังภาพนี้ครับ

2. กำหนด Property ของ Node MQTT ดังภาพนี้ และกดปุ่ม Deploy ได้เลยครับ

*การกำหนดค่า Server / Topic ให้กำหนดเหมือนกับ MQTTBox หากยังไม่เข้าใจให้ ลองอ่านที่ URL : http://themakerthailand.com/mosquittomqttonwindows/ ครับ

**เมื่อกำหนด Property ได้ถูกต้อง Node MQTT จะขึ้นสถานะเป็น Connected ครับ

3. เปิด MQTTBox ของเราขึ้นมาครับและ Publish ค่าดังภาพนี้ (อย่าลืมตรวจสอบว่า สถานะเป็น Connected หรือไม่นะครับ)

4. เมื่อ Publish แล้วให้ลองเช็ค Email ดูครับ จะพบข้อความใน Payload ของเราถูกส่งมาให้ใน Email ครับ

5. อธิบายการทำงานครับเมื่อมาถึงขณะนี้ เรามี Server ทำงานอยู่ 2 ตัวครับ
1. คือ Node-RED Server ทำงานที่ Port 1880
2. คือ MQTT Broker ทำงานที่ Port 8880

ที่ Node-RED Server มี Object 1 ตัวทำการ Subscribe Topic ที่ชื่อ esp/test อยู่ครับ (เราทำในข้อ 2 ของบทความนี้) และ Object ตัวนี้ทำการเชื่อมโยงไปที่ Email Node เพื่อส่งข้อมูลไปให้ Email ตามที่เรากำหนด

ดังนั้นเมื่อเรา Publish ข้อมูลจาก MQTTBOX ด้วยข้อความว่า {‘hello’:’3′} ข้อความนี้จะถูกส่งไปที่ MQTT Broker

จากนั้น MQTT Broker จะทำการ Broadcast Message นี้ไปให้กับทุก ๆ Client ที่ Subscribe Topic นี้ทำให้ Node-RED ได้รับ Message {‘hello’:’3′} ครับ

6. จาก 5 ขั้นตอนที่ผ่านมาเรามีสร้าง Node สำหรับรับค่าจาก MQTT Broker แล้ว ต่อไปเราจะสร้าง Node สำหรับส่งข้อมูลไปหา MQTT Broker ดูบ้างครับ โดยให้ลาก Note MQTT จาก Tab Output วางใน Flow 1 ของเราและลากเส้นเชื่อมโยงจาก Button ดังภาพนี้ครับ

7. กำหนด Property สำหรับ Node MQTT นี้เป็นดังภาพนี้ครับ จากนั้นกดปุ่ม Deploy ได้เลยครับ

8. ลองเปิดหน้า UI แล้วกดปุ่มดูครับ Payload(ข้อความ) {‘hello’:’2′} จะถูกส่งมาที่ MQTTBox ได้เช่นกัน ของเราปรากฏขึ้นมาที่ Tab Debug ครับ

9. ตอนนี้เราสามารถรับส่งข้อมูลระหว่าง MQTT Broker และ Node-RED ได้แล้วให้เราทำปุ่มเพิ่ม 2 ปุ่มสำหรับเปิดปิด ไฟ LED และเราจะต่อวงจร Arduino กันครับ

10. เมื่อลากปุ่มมาวางและเชื่อมต่อไปที่ Node sendToArduino แล้วให้กำหนด Property ของแต่ละปุ่มดังสองภาพนี้ครับ จากนั้นกดปุ่ม Deploy ได้เลยครับ

11. ลองเปิดหน้า UI ดูครับ จะพบปุ่มใหม่สองปุ่ม ทดลองกดทั้งสองปุ่มและตรวจสอบค่าที่ MQTTBox ได้รับครับว่าถูกต้องหรือไม่

*{‘hello’:’0′} = ไฟปิด

**{‘hello’:’1′} = ไฟเปิด

***เนื่องจากเราทำเงื่อนไขไว้ใน Arduino ตามบทความ Lesson 13 : ก้าวเข้าสู่ IOT – ตอนที่ 3 สั่งปิดเปิดไฟผ่านโปรโตคอล MQTT

12. ตอนนี้เราพร้อมที่จะต่อวงจร Arduino แล้วครับ ให้ต่อวงจรตามภาพนี้

13. จากนั้น Deploy Sourcecode นี้ หากท่านใดทำไม่ได้ให้ลองเข้าไปอ่านบทความ Lesson 13 : ก้าวเข้าสู่ IOT – ตอนที่ 3 สั่งปิดเปิดไฟผ่านโปรโตคอล MQTT นี้ดูนะครับ อธิบายไว้ให้ครบถ้วนแล้วครับ

#include
#include
const char* ssid = “your access point name”;
const char* password = “access password”;

const char* mqttServer = “ip of mqttserver”;
const int mqttPort = 1883;
const char* mqttUser = “mqtt broker username”;
const char* mqttPassword = “mqtt broker password”;

WiFiClient espClient;
PubSubClient client(espClient);

//Pin ที่ต่อไฟ LED
const int led = 2;

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);

//สั่งให้ไฟดับก่อน
digitalWrite(led, LOW);

//เชื่อมต่อ wifi
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“Connecting to WiFi..”);
}

Serial.println(“Connected to the WiFi network”);

//connect ไปที่ mqtt broker
client.setServer(mqttServer, mqttPort);

//กำหนด function เมื่อมีการส่งข้อมูลมาจาก MQTT
client.setCallback(callback);

while (!client.connected()) { //วนลูปจนกว่าจะต่อสำเร็จ
Serial.println(“Connecting to MQTT…”);

if (client.connect(“ESP8266Client” )) { //Connect to MQTT และกำหนดชื่อในการติดต่อ

Serial.println(“connected”);

} else {

Serial.print(“failed with state “);
Serial.print(client.state());
delay(2000);

}
}

//ส่งข้อมูล publish ไปที่ MQTT Broker โดยตั้ง topic เป็น “esp/test”
client.publish(“esp/test”, “Hello from ESP8266”);

//subscribe topic “esp/test”
client.subscribe(“esp/test”);

}

//เมื่อมีข้อมูลกลับมาจาก MQTT จะโดนส่งกลับมาที่ Method นี้
void callback(char* topic, byte* payload, unsigned int length) {

Serial.print(“Message arrived in topic: “);
Serial.println(topic);

Serial.print(“Message:”);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);

//หาก message ที่ส่งกลับมามีค่าเป็น 0 ที่ array index ที่ 10 จะสั่งให้ไฟดับ เช่น {‘hello’:’0′}
//หาก message ที่ส่งกลับมาเป็น 1 จะสั่งให้ไฟติด เช่น {‘hello’:’1′}
//ตรงนี้แล้วแต่เราจะกำหนดครับ แต่ผมอยากทำให้ง่าย ๆ ก่อนเลยใช้วิธีการ fix ค่าไว้ครับ
if (i == 10) {
if ((char)payload[i] == ‘0’) { //turn off light
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
}
}

Serial.println();
Serial.println(“———————–“);

}

void loop() {
client.loop();

}

14. ทดลองกดปุ่มเปิดปิดไฟ จากหน้า UI และดูผลที่ Arduino ได้เลยครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 16 : ก้าวเข้าสู่ IOT – ตอนที่ 6 Hello World และการส่ง Email จาก Node-RED

ใน Siries ของ Node-RED ผมจะแนะนำการใช้งานทั้งหมด 3 บทความโดยจะเริ่มต้นจาก
1. ทำความเข้าใจและการติดตั้ง Node-RED
2. เริ่มเขียนโปรแกรมบน Node-RED รวมถึงการทำ Email Alert
3. การเชื่อมต่อระหว่าง Node-RED และ MQTT Broker

บทความนี้เป็นตอนที่ 2 นะครับ เราจะเริ่มวาด Flow และเริ่ม Coding ครับ ท้ายที่สุดของบทความเราจะส่ง Email ไปที่ gmail กันครับ

เมื่อทำได้แล้วบทความต่อไปจะต่อยอด ด้วยการรับค่าจาก Sensor และส่งผ่าน MQTT Broker ไปยัง Email ของเรา รับรองว่าได้ประโยชน์แน่นอนครับ

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Notebook หรือ Computer ติดตั้ง
– Android Studio สำหรับในบทความนี้ใช้ Version 2.3
– MQTT Broker
– Node-RED Server
1 เครื่อง

ก่อนจะเริ่มเขียน Node-RED ขั้นแรกและสำคัญที่สุดคือ ตรวจสอบก่อนว่า Server Node-RED Run อยู่หรือไม่ครับ ลองเปิด Web browser เข้าไปที่ URL : http://127.0.0.1:1880 ดูครับ
หากไม่ได้ Run หรือรันไม่ขึ้นลอง Restart เครื่องแล้วพิมพ์คำสั่งดังนี้ครับ ‘node-red’
*หากยังไม่ได้ลองปิด Firewall ดูนะครับ
** หากทำติดต่อกันมาจากตอนที่แล้วสามารถทำต่อได้เลยนะครับ Server ควรจะ Run อยู่แล้วครับ

หลังจากเปิด URL http://127.0.0.1:1880 ขึ้นมาแล้ว ควรจะได้หน้าจอแบบด้านล่างนี้ครับ เรามาเริ่มทำความเข้าใจ Component ของ Node-RED ก่อนคร่าว ๆ ดังนี้ครับ

A.ด้านซ้ายของจอจะเป็น Panel ของ Node ต่าง ๆ ให้เราหยิบใช้งานได้ครับ(Drag-Drop ที่ Flow) ได้เลยครับ สังเกตุที่ highlight สีน้ำเงินครับ ลักษณะของกล่องที่เป็น Input และ Output จะต่างกัน เวลาเราลากมาวางสังเกตุให้ดีนะครับ

B.ตรงกลางของจอภาพจะเป็น Flow ครับ อย่างที่ผมเล่าไปในบทความที่แล้ว Node-RED จะทำงานแบบ Flow-Base ครับ ทุกอย่างที่วางจะโดนลากเส้นเชื่อมโยงเป็น Flow ครับ ซึ่งเราสามารถวาดได้มากกว่า 1 Flow และวาด Sub-Flow ได้ด้วยครับ นอกจากนี้เราสามารถ Zoom Flow ได้นะครับ จากลูกศรด้านล่าง

C.สำหรับ Panel ทางด้านขวา จะเป็นส่วนในการแสดงข้อมูลต่าง ๆ ของระบบครับ เช่น หน้าจอ Debug, หน้าจอ Config สำหรับดู Node ทั้งหมดใน Flow และ Dashboard สำหรับกำค่า Theme ต่าง ๆ เป็นต้น

D.มุมบนขวาสุด จะเป็น Menu หลักของระบบ

E.สำคัญที่สุดคือปุ่มนี้ครับ เป็นปุ่มสำหรับกด Deploy โปรแกรม เมื่อ Deploy แล้วจะไปแสดงที่ URL http://localhost:1880/ui/ ซึ่งการ Deploy จะมี 3 ประเภท คือ Deploy ทุก Flow ทุก Node, Deploy เฉพาะ Flow ที่แก้ไข และ Deploy เฉพาะ Node ที่แก้ไข

เริ่ม Coding กันเลย!!!
1. Click เลือกที่ Tab Input และเลือก inject มาวางที่ Flow1 และเลือกที่ Tab Output เลือก debug มาวางไว้เช่นกัน จะได้ดังภาพนี้ครับ

*Inject เป็น Node สำหรับส่งคำสั่งโดยตรงไปออกไปใน Node ที่เราต้องการ
*Debug เป็น Node สำหรับแสดงข้อมูลใน Tab Debug ซึ่ง Tab นี้จะอยู่ทางด้านขวาของจอภาพ

2. จากนั้นลากเส้นเชื่อมจาก Node Timestamp มาที่ Node msg.payload ดังภาพนี้ครับ จากนั้น Click Deploy ครับ

3. คลิกที่ปุ่มใน Node Timestamp (ลูกศรสีแดงดังภาพด้านล่าง) จะเห็นข้อมูล Timestamp ขึ้นที่ Tab Debug ดังภาพนี้ครับ

4. ทดลองแก้ไขการส่งข้อความไปโดยกำหนดเป็นคำว่า Hello ดูครับ วิธีการคือคลิกซ้ายที่ Node Timestamp และกำหนด Payload เป็นคำว่า Hello (เลือกเป็น String) และกดปุ่ม Deploy และทดลองกดปุ่มดูอีกครั้งครับ จะเห็นข้อความ Hello ขึ้นที่ Tab Debug ครับ

5. สร้าง UI ตัวแรกกันครับขอเริ่มที่ Button ละกันนะครับ เลือก Node ที่ชื่อButton และลากมาวางที่ Flow 1 ของเราครับ

6. จากนั้นกำหนด Property ของ Button โดยกำหนด Group เป็น HOME และกำหนด Payload เป็น {‘hello’:’2′} ดังภาพนี้ครับ จากนั้นกดปุ่ม Done ครับ

*การสร้าง Group เราสามารถ Click ที่ Default ให้ระบบสร้างให้ได้เลยครับ

7. ลากเส้นจาก Node Button ไปที่ Node msg.payload ดังภาพนี้และกดปุ่ม Deploy ได้เลยครับ

8. ไปที่หน้า http://localhost:1880/ui/ จะเห็น ปุ่มของเราปรากฏขึ้นมาทดลองคลิกดู และกลับมาที่หน้า http://127.0.0.1:1880/ จะเห็น Messge ของเราปรากฏขึ้นมาที่ Tab Debug ครับ

9. เพิ่ม UI ตัวที่สองเป็น Text สำหรับแสดง Output เราจะได้ไม่ต้องย้อนมาดูที่ Tab Debug ครับ โดยให้ลาก Node ที่ชื่อ Text ลงมาวางที่ Flow 1 และลากเส้นเชื่อมจาก Node button และ Node Text ดังภาพนี้ครับ

10. กำหนด Property ให้ Node Text ดังภาพนี้จากนั้นกดปุ่ม Done และ Deploy ครับ

11. ลองไปดูที่หน้าจอ http://localhost:1880/ui/ จะพบ Text ปรากฏขึ้นมาใต้ปุ่มครับ

12. ทดลองกดปุ่มดูครับ จะเห็นข้อความ {‘hello’:’2′} แสดงขั้นที่ text ดังภาพนี้ครับ

13. เพิ่มการทำงานให้ซับซ้อนขึ้นโดยเมื่อกดปุ่มแล้วให้ส่ง ข้อความไปที่ Email ครับโดยให้ลาก Node Email ลงมาใน Flow 1 จากนั้นลากเส้นเชื่อมโยงดังภาพนี้ครับ

14. กำหนด Property ของ Node Email ดังภาพนี้ครับ (ใช้ข้อมูล Email ของเราเองนะครับ) และกดปุ่ม Deploy ได้เลยครับ

15. ทดลองกดปุ่มที่หน้า http://localhost:1880/ui/ จะมี Email ส่งไปที่ Mail ที่กำหนดไว้ครับ

16. ขณะนี้ Node-RED เราพร้อมใช้งานในระดับหนึ่งแล้ว ตอนต่อไปจะนำเสนอการเชื่อมโยงกับ MQTT ครับ

หลังจากผ่านบทความนี้แล้ว บทความต่อไปจะเป็นการเชื่อมโยง Sensor ผ่าน MQTT เข้ามาที่ Node-RED และแสดงผลเป็นลักษณะนี้ครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 15 : ก้าวเข้าสู่ IOT – ตอนที่ 5 มาใช้งาน Node-RED กันเถอะ

ใน Series ของ Node-RED ผมจะแนะนำการใช้งานทั้งหมด 3 บทความโดยจะเริ่มต้นจาก
1. ทำความเข้าใจและการติดตั้ง Node-RED
2. เริ่มเขียนโปรแกรมบน Node-RED รวมถึงการทำ Email Alert
3. การเชื่อมต่อระหว่าง Node-RED และ MQTT Broker

วันนี้เราเริ่มด้วยการติดตั้ง Node-RED กันก่อนละกันนะครับ

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Notebook หรือ Computer ติดตั้ง
– Android Studio สำหรับในบทความนี้ใช้ Version 2.3
– MQTT Broker
1 เครื่อง

Node-RED เป็นเครื่องมือในการพัฒนา IOT ซึ่งถูกพัฒนาขึ้นโดยบริษัท IBM Emerging Technology และส่วนหนึ่งของทีมงาน JS Foundation ลักษณะของ Node-RED จะเป็น Virtual Tool ซึ่งเชื่อมโยงฮาร์ดแวร์ Service และ API ต่าง ๆ เข้าด้วยกันในลักษณะ Flow-Base ซึ่งฮาร์ดแวร์ Service หรือ API ต่าง ๆ ที่อยู่ใน Flow จะถูกแสดงผลในรูปแบบ Node และ Node แต่ละ Node จะทำงานได้ด้วยตัวเอง(Blackbox) ทำให้ผู้พัฒนา Application ไม่ต้องเขียน Code ให้ยุ่งยาก

ดังนั้น Node-RED จะเป็นทางออกที่ดีสำหรับผู้พัฒนา IOT ที่ไม่อยากเขียน Code มาก แต่ได้ผลลัพธ์ที่ต้องการ ตัวอย่างการประยุกต์ใช้งาน Node-RED เช่น
– การส่ง Email เพื่อพยากรณ์อากาศจาก Weather Sensor
– การแสดงข้อมูลจาก Sensor ต่าง ๆ ใน Twiter
– การแสดง Dashboard จาก Sensor ภายในบ้าน

เริ่มติดตั้ง Node-RED กันเลย!!!
1. ตรวจสอบก่อนว่า NodeJS ได้มีการติดตั้งที่เครื่องแล้วหรือยัง ด้วยการเปิด Command Prompt ขึ้นมาและพิมพ์คำว่า ‘node -v’ หากติดตั้งแล้วระบบจะแสดงหมายเลข Version ของ NodeJS ขึ้นมา

2. หากยังไม่ได้ติดตั้งสามารถเข้าไปที่ https://nodejs.org/en/download/ จากนั้น Download File MSI และทำการติดตั้งได้เลย

3. สำหรับวิธีการติดตั้ง Node-RED ให้ไปที่หน้าต่าง Command Prompt และพิมพ์คำสั่ง ‘npm install -g –unsafe-perm node-red’

4. ระบบจะทำการติดตั้ง Node-RED ให้โดยอัตโนมัติ *ขั้นตอนการติดตั้งนี้ต้องต่อ Internet ไว้ด้วยนะครับ เพราะว่าคำสั่ง NPM(ode package manager) จะทำการ Download Library File มาให้โดยอัตโนมัติครับ

5. ก่อนใช้งานอยากจะให้ทุกท่านติดตั้ง Dashboard Module ไว้ก่อนเลยครับ เพราะว่าเราต้องใช้งานด้วยการพิมพ์คำสั่ง ‘npm install node-red-dashboard’

6. ทดสอบ Run Node-RED ได้เลยครับด้วยการพิมพ์คำสั่ง node-red ที่ Command Prompt ครับ จากนั้นจะเห็น Log Message แสดงข้อมูลเช่น Version ของ Node-Red ขึ้นที่ Command Prompt ดังภาพนี้ครับ

นอกจากนี้ส่วนทำสำคัญคือแสดงข้อมูลว่า Node-RED Run อยู่ที่ URL และ Port อะไรดังภาพนี้ครับ

7.ทดลองเข้าไปที่ URL ดังกล่าวได้เลยครับ จะพบหน้าจอการใช้งาน Node-RED ปรากฏขึ้นมาครับ

8. และหากเข้าไปที่ URL 127.0.0.1:1880/ui ก็จะพบหน้าจอ Dashboard ของเราครับ (ซึ่งยังว่าง ๆ อยู่รอการสร้างสรรค์ของพวกเรา)

9. มาถึงขั้นตอนนี้ เราติดตั้ง Node-RED สำเร็จแล้ว พร้อมที่จะใช้งานแล้วครับ สามารถอ่านต่อที่บทความ Lesson 16 ได้เลยครับ

บทความนี้เป็นบทความเริ่มต้นสำหรับเริ่มใช้งาน Node-RED นะครับ สำหรับบทความต่อไปจะเป็นบทความเริ่มการเขียน Node-Red (Hello World) และเพิ่ม API การส่ง Email ไปที่ gmail เชิญติดตามต่อได้เลยครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 14 : ก้าวเข้าสู่ IOT – ตอนที่ 4 IOT ครบวงจรจาก Android ถึง MQTT Broker ส่งต่อ Arduino

ต่อจาก Lesson13 หลังจากที่เราควบคุม Arduino ผ่าน MQTTBox ได้แล้ว บทความนี้จะต่อยอดด้วยการทำ Mobile Application ส่งคำสั่งมาควบคุม Arduino

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์
ลำดับ ชิ้นส่วน จำนวน
1 Notebook หรือ Computer ติดตั้ง – Android Studio สำหรับในบทความนี้ใช้ Version 2.3 – MQTT Broker 1 เครื่อง
2 ESP8266-ESP01 1 ตัว
3 Arduino UNO R3 Board 1 ตัว

บทความนี้จะยาวหน่อยนะครับ และต้องใช้ความรู้ 3 เรื่องคือ Android, MQTTBroker และ
Arduino ตั้งสติและลุยได้เล้ยยยยย

เริ่มกันเลย!!!
1. สร้างโปรเจคใหม่ใน Android Studio โดยเลือกเมนู File->New และกำหนดชื่อโปรเจค ตามที่ต้องการ

2. สร้างไฟล์ MainActivity และวาง Component ต่าง ๆ ดังภาพ

3. การวาง Component หากวางไม่ได้ ให้ลองเปิด TextFile นี้ Tab Text จากนั้นแก้ไขข้อมูลในช่อง tools:context และ tools:showIn ให้สอดคล้องกับชื่อ Project ที่เราสร้าง

*หากขั้นตอนนี้ติดปัญหาในการตั้งชื่อสามารถ Download ไฟล์ Project นี้ไปใช้งานได้เลยครับ

4. เพิ่ม Jar ไฟล์สำหรับให้ Android รู้จัก MQTT โดยให้ Download 2 ไฟล์นี้ จากนั้น Copy ไปวางใน folder Libs ของ Project (เลือกมุมมองเป็นแบบ Project ก่อนนะครับ เพื่อจะเห็น folder Libs)

5. คลิกขวาที่ไฟล์ jar จากนั้นเลือก Add as library

6. เพิ่มสิทธิการใช้งาน โดยไปที่ไฟล์ AndroidManifest.xml แก้ 2 จุดคือ Permission และเพิ่ม Service MQTT ดังภาพนี้

7. สร้างไฟล์ PahoMqttClient.java เพื่อใช้เป็น Class สำหรับจัดการคำสั่งต่าง ๆ ในการติดต่อสื่อสารกับ MQTT Broker จากนั้น Copy SourceCode นี้ไปวางได้เลยครับ

8. มาจัดการคำสั่งต่าง ๆ สำหรับการกดปุ่มและการแสดงผลที่ไฟล์ MainActivity.java โดยต้องมี Method อย่างน้อยดังนี้

@Override
protected void onCreate(Bundle savedInstanceState) {….

Button mButton = (Button)findViewById(R.id.btnClear);
mButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View view) {
EditText logText = (EditText)findViewById(R.id.txtLog);
logText.setText(“”);
}
}
);

mButton = (Button)findViewById(R.id.btnSubscriber);
mButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View view) {
setMessageNotification(“Click”,”Subscriber Click”);
try {

EditText topicText = (EditText)findViewById(R.id.txtTopic);
EditText messageText = (EditText)findViewById(R.id.txtMessage);

pahoMqttClient.subscribe(mqttAndroidClient,topicText.getText().toString(),1);

setMessageNotification(“Click”,”Subscriber Topic :”+ topicText.getText() );
} catch (MqttException e) {

setMessageNotification(“error”,e.getMessage());
}
}
});

mButton = (Button)findViewById(R.id.btnConnect);
mButton.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View view)
{
EditText urlText = (EditText)findViewById(R.id.txtUrl);
mqttAndroidClient = pahoMqttClient.getMqttClient(getApplicationContext(), urlText.getText().toString(), “Client3”);

setMessageNotification(“Connect”,”Try to connect :”+urlText.getText());

mqttAndroidClient.setCallback(new MqttCallbackExtended() {
@Override
public void connectComplete(boolean b, String s) {
setMessageNotification(s,”Connecttion Completed”);
}
@Override
public void connectionLost(Throwable throwable) {
setMessageNotification(“Error”,”Connecttion Lost”);
}
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
setMessageNotification(s, new String(mqttMessage.getPayload()));
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {

}
});
}
}
);

mButton = (Button)findViewById(R.id.btnSend);
mButton.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View view)
{
setMessageNotification(“Click”,”Publish Click”);
try {

EditText topicText = (EditText)findViewById(R.id.txtTopic);
EditText messageText = (EditText)findViewById(R.id.txtMessage);

pahoMqttClient.publishMessage(mqttAndroidClient,messageText.getText().toString(),1, topicText.getText().toString());

setMessageNotification(“Click”,”publishMessage Topic :”+ topicText.getText() + ” Msg :” + messageText.getText());
} catch (MqttException e) {

setMessageNotification(“error”,e.getMessage());
} catch (UnsupportedEncodingException e) {
setMessageNotification(“error”,e.getMessage());
}
}
});

….

}

มี Method สำหรับ Write Log ขึ้นที่หน้าจอ

private void setMessageNotification(String s, String s1) {
EditText editText = (EditText)findViewById(R.id.txtLog);Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

//String editTextStr = editText.getText().toString()
editText.setText(editText.getText()+”\r\n”+ today.minute + ” :” + today.second + ” => ” + s + “,”+s1);

}

9. สรุป Class ที่แก้ไขใน Android จะมี 2 Class คือ MainActivity.java และ PahoMqttClient.java และมี XML ที่แก้ไขคือ AndroidManifest.xml มาถึงจุดนี้เราควรจะ Build และ Run Mobile Application ของเราได้

10. ย้อนกลับมาที่ MQTT Broker ของเราครับ ก่อนที่จะลอง Connect จาก Mobile เราลอง Connect MQTT Broker จาก MQTTBox ก่อนโดยใช้ตรวจสอบดังนี้

10.1 ตรวจสอบ Service ของ MQTT Broker ว่า Run สำเร็จหรือไม่ที่หน้าต่าง Services ของ MS-Windows

10.2 เปิด MQTTBox ขึ้นมาและลองส่งคำสั่ง Publish/Subscribe ดูครับ

10.3 หากสองขั้นตอน(10.1 และ 10.2)นี้ผ่าน เราพร้อมที่จะส่งคำสั่งจาก Android ไปที่ MQTT Broker แล้วครับ แต่หากยังไม่ผ่านลองย้อนไปดูบทความ “Lesson 12 : ก้าวเข้าสู่ IOT – ตอนที่ 2 ทดสอบเจ้ายุงน้อย(MQTT) บน Windows กัน” ดูครับ

11. มาถึงขั้นตอนนี้สามารถส่งคำสั่งจาก Mobile ไปที่ MQTT Broker ได้แล้วครับ ลองส่งคำสั่งดังนี้ครับ

11.1 ทดลอง Connect ไปที่ MQTT Broker ก่อนนะครับ กำหนด URL ให้ถูกต้องและกดปุ่ม Connect ครับ จะได้ Message ว่า Connect Completed

11.2 ทดลอง Subscribe โดยกดปุ่ม Subscriber ได้เลยครับ สังเกตุว่า ชื่อ Topic ต้องตรงกับใน MQTTBox นะครับ

11.3 ทดลอง Publish Message มาจาก MQTTBox ครับ Message นี้จะมาปรากฏที่ Mobile ของเราครับ

11.4 ทดลอง Publish Message มาจาก Mobile ครับ Message นี้จะมาปรากฏที่ MQTTBox ของเราครับ

12. ขั้นตอนต่อมาดำเนินการต่อวงจร Arduino จากบทความ “Lesson 13 : ก้าวเข้าสู่ IOT – ตอนที่ 3 สั่งปิดเปิดไฟผ่านโปรโตคอล MQTT” ให้พร้อมไว้ครับ

13. จาก Mobile Application ทดลอง Publish Message ‘{‘hello’:’1′}’ มาที่ MQTT Broker ดูครับ จะเห็นว่า MQTT Broker จะ Forward Message นั้นต่อมาให้ที่ Arduino และจะเห็นไฟ LED ที่ Arduino เปิดปิดตามคำสั่ง ‘{‘hello’:’0′}’ และ ‘{‘hello’:’1′}’ ครับ

14. มาถึงขั้นตอนนี้ เราสามารถควบคุม Arduino ผ่าน Mobile โดยใช้ Protocol MQTT ได้แล้ว ท่านพร้อมสำหรับงาน IOT แล้วครับ เริ่มสร้างสรรค์งานของตัวท่านเองได้เลยครับ

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 13 : ก้าวเข้าสู่ IOT – ตอนที่ 3 สั่งปิดเปิดไฟผ่านโปรโตคอล MQTT

ต่อจาก Lesson12 หลังจากที่เราติดตั้ง MQTT Broker ที่เครื่องของเราและลองทดสอบผ่าน MQTT Box เรียบร้อย บทเรียนนี้เราจะสั่งปิดเปิดไฟ LED จาก MQTTBox กันครับ

บทความนี้จะช่วยให้เราต่อยอดไปทำ Website หรือ Mobile Appication เพื่อควบคุม Arduino ได้อย่างแน่นอน

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Notebook หรือ Computer1 เครื่อง
2ESP8266-ESP011 ตัว
3Arduino UNO R3 Board1 ตัว

เริ่มกันเลย!!!
1. เนื่องจาก Code ชุดนี้ใช้ Library ชื่อว่า PubSubClient.h ดังนั้ติดตั้ง Library นี้ก่อนครับ โดยเข้าไปที่ Manage Libraries คลิกตามภาพที่ 1 นะครับ จากนั้นกรอกคำว่า PubSubClient และกดปุ่ม Install ดังภาพที่ 2 ครับ

ภาพที่ 1 แสดงการเข้าไปเพิ่ม Libraries PubSubClient


ภาพที่ 2 แสดงการติดตั้ง Libraries PubSubClient

*บทความสำหรับติดตั้ง Library โดยระเอียด คลิกที่นี่

2. Compile Sourcecode : โดยคลิก Download Source Code ที่นี่ จากนั้น Copy Source Code นี้วางที่ Arduino IDE ของท่าน (อย่าลืมกำหนดค่า Access point และ Password) เปลี่ยนประเภท Board เป็น ESP8266 ตามภาพที่ 3 และกด Validate ครับ

ภาพที่ 3 เปลี่ยนประเภท Board เป็น ESP8266 จากนั้น กด Validate ครับ

4. อธิบาย Source Code ดังนี้

#include
#include
const char* ssid = “your access point name”;
const char* password = “access password”;

const char* mqttServer = “ip of mqttserver”;
const int mqttPort = 1883;
const char* mqttUser = “mqtt broker username”;
const char* mqttPassword = “mqtt broker password”;

WiFiClient espClient;
PubSubClient client(espClient);

//Pin ที่ต่อไฟ LED
const int led = 2;

void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);

//สั่งให้ไฟดับก่อน
digitalWrite(led, LOW);

//เชื่อมต่อ wifi
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“Connecting to WiFi..”);
}

Serial.println(“Connected to the WiFi network”);

//connect ไปที่ mqtt broker
client.setServer(mqttServer, mqttPort);

//กำหนด function เมื่อมีการส่งข้อมูลมาจาก MQTT
client.setCallback(callback);

while (!client.connected()) { //วนลูปจนกว่าจะต่อสำเร็จ
Serial.println(“Connecting to MQTT…”);

if (client.connect(“ESP8266Client” )) { //Connect to MQTT และกำหนดชื่อในการติดต่อ

Serial.println(“connected”);

} else {

Serial.print(“failed with state “);
Serial.print(client.state());
delay(2000);

}
}

//ส่งข้อมูล publish ไปที่ MQTT Broker โดยตั้ง topic เป็น “esp/test”
client.publish(“esp/test”, “Hello from ESP8266”);

//subscribe topic “esp/test”
client.subscribe(“esp/test”);

}

//เมื่อมีข้อมูลกลับมาจาก MQTT จะโดนส่งกลับมาที่ Method นี้
void callback(char* topic, byte* payload, unsigned int length) {

Serial.print(“Message arrived in topic: “);
Serial.println(topic);

Serial.print(“Message:”);
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);

//หาก message ที่ส่งกลับมามีค่าเป็น 0 ที่ array index ที่ 10 จะสั่งให้ไฟดับ เช่น {‘hello’:’0′}
//หาก message ที่ส่งกลับมาเป็น 1 จะสั่งให้ไฟติด เช่น {‘hello’:’1′}
//ตรงนี้แล้วแต่เราจะกำหนดครับ แต่ผมอยากทำให้ง่าย ๆ ก่อนเลยใช้วิธีการ fix ค่าไว้ครับ
if (i == 10) {
if ((char)payload[i] == ‘0’) { //turn off light
digitalWrite(led, LOW);
} else {
digitalWrite(led, HIGH);
}
}
}

Serial.println();
Serial.println(“———————–“);

}

void loop() {
client.loop();

}

5. ต่อวงจรตามรูปนี้ครับ

ภาพที่ 4 แสดงการต่อวงจรกับ ESP01

6. ก่อนจะ Upload Code ไปที่ Arduino ตรวจสอบการทำงานของ MQTT Broker ก่อนครับ
โดยเปิดที่ Windows Service และตรวจสอบการ Run Service ดังภาพที่ 5

ภาพที่ 5 แสดงการ Run Service MQTT Broker

7. ทดสอบการส่ง Public และ Subscribe ไปที่ MQTT Broker โดยใช้ MQTTBox โดยกำหนดชื่อ Topic เป็น “esp/test” จะได้ดังภาพที่ 7 ครับ หากติดปัญหาไม่สามารถส่งข้อมูลหา MQTT Broker ได้ให้ลองอ่าน Lesson 12 ดูนะครับ

ภาพที่ 7 ทดสอบการเชื่อมต่อ MQTT Broker และทดสอบส่งคำสั่ง Publish และ Subscriber

8. เมื่อถึงขั้นตอนนี้ทดลอง Upload Code ไปที่ Arduino Board ได้เลยครับ เมื่อ Upload แล้วลองกดหน้าต่าง Serial Monitor เพื่อดู Status Message ที่ได้เขียนกำกับไว้ใน Code ครับ

Message จะถูก Write ออกมาโดยเริ่มจากการต่อไปที่ Wifi ตามที่ท่านได้กำหนดไว้ใน Code
เมื่อต่อ Wifi ได้แล้วจะเริ่มทำการติดต่อไปที่ MQTT Server ซึ่งควรจะได้ Message ดังภาพที่ 8 ครับ

ภาพที่ 8 แสดง Message ที่ควรจะแสดงในช่อง Serial Monitor

9. เมื่อได้รับ Message “connected” ตามภาพที่ 8 แล้วให้ลองเปิดหน้าต่าง MQTTBox จะพบ Message “Hello from ESP8266” ดังภาพที่ 9 นี้ แสดงว่า MQTT ได้รับข้อมูลการ Publish จาก Arduino แล้ว

ภาพที่ 9 แสดงหน้าต่าง MQTTBox เมื่อได้รับ Message Publish จาก Arduino ครับ

10. สังเกตุดู LED ที่ต่อไว้และทดลองส่งคำสั่งจาก MQTTBox ได้เลยครับโดยพิมพ์คำว่า
{‘hello’:’0′} เพื่อปิดไฟ และ {‘hello’,’1′} (Message นี้โดน If เอาไว้ใน Arduino Code เช็คค่า 0 และ 1 ไว้) เพื่อเปิดไฟ ลองเปิดหน้าต่าง Serial Monitor ดูด้วยครับ จะเห็น Message ที่เราส่งมาจาก MQTTBox

ภาพที่ 10 แสดงการส่ง Publish Message จาก MQTTBox ไปที่ Arduino

11. สำเร็จแล้ว !!! ถึงขั้นตอนนี้เราสามารถสร้าง MQTT Broker(Server) ได้เองแล้ว นอกจากนี้เราสามารถสั่งปิด เปิดไฟผ่าน Protocol MQTT ได้แล้ว ต่อไปเราจะทำ Mobile Application ควบคุม Arduino ผ่าน MQTT กันครับ

Next Step :
บทความต่อไป เรามาสร้าง Android Application สั่งงาน Arduino ผ่าน MQTT Broker กันนะครับ โปรดติดตาม

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 12 : ก้าวเข้าสู่ IOT – ตอนที่ 2 ทดสอบเจ้ายุงน้อย(MQTT) บน Windows กัน

ในบทเรียนนี้จะแนะนำให้รู้จักกับ Protocol MQTT เพื่อประยุกต์ใช้งานกับ IOT สนุกแน่นอนครับ เริ่มกันเลย!!

ระดับความยาก :  

สิ่งที่จะได้จากบทเรียนนี้

บทความนี้ผมอ้างอิงจาก URL ดังนี้ครับ (ขอขอบพระคุณล่วงหน้าครับ)
1. http://mqtt.org/
2. http://workswithweb.com/mqttbox.html
3. https://mosquitto.org/
4. https://sivatechworld.wordpress.com/2015/06/11/step-by-step-installing-and-configuring-mosquitto-with-windows-7/

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Notebook หรือ Computer1 เครื่อง

เริ่มกันเลย!!!
1. รู้จักกันก่อน : MQTT Protocol ถูกคิดค้นโดยบริษัท IBM และ Arcom(Eurotech) ในปี 1999 เป็น Protocol ที่ใช้ในการติดต่อสื่อสารหรือรับส่งข้อความ ระหว่างอุปกรณ์และอุปกรณ์ มันเหมาะที่จะนำมาใช้กับ IOT อย่างมาก เนื่องจากใช้ Brandwidth น้อย และไม่จำเป็นต้อง Specification ของอุปกรณ์สูงในการรับส่งข้อมูล รวมทั้ง Message ที่รับส่งกัน ก็มีขนาดเล็กอีกด้วย

ในเรื่องความปลอดภัย สำหรับ Protocol MQTT Version 3.1 รองรับมาตรฐาน SSL แล้ว
สำหรับ Port ที่ใช้ การเชื่อมต่อปกติจะใช้ Port 1883 และสำหรับ SSL จะใช้ Port 8883 ดังนั้นในการทดลองนี้
ระมัดระวังเรื่อง Firewall ในเครื่องของเราด้วยนะครับ

2. องค์ประกอบของ MQTT Protocol ประกอบด้วย 2 ส่วนสำคัญ ดังนี้

2.1 MQTT Server เป็นเครื่องแม่ข่ายหรืออุปกรณ์ ซึ่งทำหน้าที่บริหารจัดการ การรับส่งข้อมูลระหว่าง Client ต่าง ๆ ซึ่ง
ใน Protocol นี้จะเรียกว่า Broker (ขอให้จินตนาการว่าเป็น Facebook Server ครับ)

2.2 MQTT Client เป็นเครื่องหรืออุปกรณ์ ที่ต้องการรับส่งข้อมูลกับ Broker (ขอให้จินตนาการว่าเป็นสมาชิก Facebook
ทุก ๆ คนครับ) โดยจะแบ่งประเภทข้อความในการสื่อสารออกเป็น 2 ประเภท คือ

Subscriber เป็น Message สำหรับลงทะเบียนหัวข้อ(Topic) เพื่อใช้เป็น Topic อ้างอิงในการสื่อสาร
เมื่อ Client ส่ง Message Subscriber ไปที่ Broker แล้ว Broker จะจดจำ Client นั้นไว้ว่าได้ลงทะเบียน Topic อะไรไว้
และเมื่อมี Publish Message มาที่ Topic นั้น ๆ Broker จะ Forward ข้อความนั้น ๆ มาให้ (เปรียบเทียบเป็นสมาชิก
Facebook ซักคนเริ่มสร้างโพสแรก หรือ สมาชิก Facebook คนอื่น ๆ มากด Like ที่โพสครับ การสร้างโพสและLike โพสนี้
คือการ Subscriber ครับ)

Publish เป็น Message เพื่อส่งข้อมูลให้กับ Topic นั้น ๆ โดยทุก ๆ Message จะมีเวลาติดมาด้วยเสมอ
และจะไม่มีการทับ Message ก่อนหน้า (เปรียบเทียบเป็นเพื่อน ๆ มา Comment ใน Post ของเรา ดังนั้นเราที่สร้างโพสและ
เพื่อนๆ ที่มากด Like ที่โพสนั้นก็จะเห็นด้วย)

ที่ผมเล่ามาอาจงง ๆ ขออธิบายด้วย Sequence Diagram นี้ละกันนะครับน่าจะเข้าใจง่ายกว่าครับ

หากยังไม่เข้าใจ ลองดู Diagram เปรียบเทียบกับการใช้งาน Facebook ด้านล่างนี้ครับ

3. ลองใช้งานจริงกันเลยดีกว่าครับ ติดตั้ง Broker กันก่อนครับ MQTT Broker มีหลายค่าย พัฒนาขึ้นมา
ให้ได้ใช้งาน เช่น HiveMQ, Mosquitto,CloudMQTT, Eclipse IoT เป็นต้น ลองเข้าไปศึกษากันต่อได้ที่นี่ครับ
ในบทความนี้ผมเลือกใช้ Mosquitto ครับ วิธีติดตั้งมีดังนี้ครับ

3.1 Download โปรแกรม Mosquitto จาก URL นี้ครับ
https://mosquitto.org/

3.2 ติดตั้งโปรแกรมที่ได้ Download มาโดยเมื่อคลิกที่ไฟล์ mosquitto-1.4.14-install-win32.exe แล้วนั้น
ระบบจะแจ้งให้เราติดตั้งโปรแกรม เพิ่มอีก 2 ตัวด้วย OpenSSL และ pthreads ก่อนเนื่องจาก Mosquitto
ต้องการใช้ Dll บางตัวจาก 2 โปรแกรมนั้น ให้เราค้างที่ Popup นี้ไว้ก่อนอย่าเพิ่งกดปุ่ม Next
ขั้นตอนต่อไปเราจะไปติดตั้ง OpenSSL และ pthreads ให้เรียบร้อยก่อน
(ทำข้อ 3.2.1 และ 3.2.2 ให้เรียบร้อยก่อน แล้วไปต่อที่ข้อ 3.3 ครับ)

3.2.1 ให้คลิกที่ Link แรก เพื่อเปิดหน้า Browser สำหรับติดตั้ง OpenSSL และเลื่อนหน้าจอมาจบพบ
Link ตามภาพด้านล่างนี้และ Save ได้เลยครับ

จากนั้นให้ Double Click ที่ไฟล์ Win32OpenSSL_Light-1_1_0f.exe ที่ได้ Download มาและทำการ Setup
ตามคำแนะนำของระบบ

3.2.2 ทำการติดตั้ง pthreads โดยเปิดที่ URL ftp://sources.redhat.com/pub/pthreads-win32/dll-latest/dll/x86/
ตามรูปในข้อ 3.2 และทำการ copy dll มาไว้ใน folder ที่เราต้องการ

3.3 เมื่อติดตั้ง OpenSSL และ pthreads เสร็จแล้ว ให้กลับมาที่ Popup ที่ค้างไว้ที่ข้อ 3.2 กันต่อครับ
ให้คลิก Next ได้เลยครับ (ให้จด Path ที่ติดตั้ง Mosquitto ไว้ด้วยนะครับ) และดำเนินการ Setup
ต่อไป 2-3 ขั้นตอนก็จะติดตั้งระบบเสร็จครับ แต่อย่าเพิ่ง Run Service นะครับ

3.4 เมื่อติดตั้งเสร็จแล้ว ต้อง Copy Dll จาก OpenSSL และ pthreads ก่อนครับ โดยให้เปิด
Path ที่ติดตั้ง Mosquitto และ Copy Dll ตามสองข้อด้านล่างนี้ครับ (3.4.1 และ 3.4.2)

3.4.1 Copy Dll ดังรูปนี้จาก OpenSSL มาวางใน Folder ของ Mosquitto ครับ

3.4.2 Copy Dll ดังรูปนี้จาก pthreads มาวางใน Folder ของ Mosquitto ครับ

3.5 Start Mosquitto Service ได้เลยครับ และตรวจสอบว่า Port 1883 นั้นเปิดพร้อมให้ติดต่อสื่อสารหรือยังครับ

**ขณะนี้ MQTT Broker ติดตั้งเรียบร้อยแล้วครับ ขั้นตอนต่อไปเรามาทดสอบการสื่อสารกันครับ

4. เราลองติดตั้ง Client จำลอง เพื่อทดสอบความเข้าใจการใช้งาน MQTT กันครับ มี MQTT Client
หลายตัวที่สามารถนำมาทดลองได้เช่น MQTTLens MQTTBox เป็นต้น สามารถใช้ได้ทั้ง 2 ตัวครับ
บทความนี้ผมเลือกใช้ MQTTBox ละกันนะครับ ให้ทำดังนี้ครับ

4.1 ติดตั้ง MQTTBox ผ่าน Chrome ครับ โดยเข้าไปที่ URL
https://chrome.google.com/webstore/search/mqtt จากนั้นกดปุ่ม Add To Chrome

4.2 หลังจากติดตั้งโปรแกรม MQTTBox เสร็จแล้ว(MQTTBox จะอยู่ใน Chrome://apps )ก็เปิดขึ้นมาได้เลยครับ จะพบหน้าจอด้านล่าง
ให้ Click ที่ปุ่ม Create MQTT Client ก่อนครับ

4.3 เมื่อเปิดหน้าต่างสร้าง MQTT Client ขึ้นมาแล้ว ให้ระบุ 3 ช่องดังนี้
1. ชื่อ MQTT Client ตามที่ต้องการครับ
2. Protocal เลือกเป็น TCP ครับ
3. กำหนด IP เป็น IP ของเครื่องเราครับ

4.3.1 วิธีการตรวจสอบ IP ของเครื่องให้ใช้คำสั่ง Ipconfig ที่หน้าต่าง Command Prompt

4.4 เมื่อได้ Client ตัวที่ 1 มาแล้วให้ลองสร้าง Client ตัวที่ 2 ด้วยวิธีเดียวกันครับ
โดยให้เปิด Chrome ขึ้นมาอีกหน้าจอหนึ่งครับ

4.5 ย้อนมาที่หน้าจอที่ของ Client ตัวที่ 1 ให้ลอง Subscriber Message ได้เลยครับ โดย
ให้กดปุ่ม Add Subscriber และระบุชื่อ Topic ตามต้องการและกดปุ่ม Subscribe

**หาก MQTTBox ขึ้น Connection Error ให้ตรวจสอบหมายเลข IP ดูครับ

เมื่อ Client Subscriber สำเร็จจะปรากฏหน้าต่างดังภาพด้านล่างนี้ครับ ผมใช้ Topic ชื่อว่า Room1/Light1/

4.6 ไปที่หน้าต่าง Client ที่ 2 ครับ ลอง Publish Message มาที่ Topic Room1/Light1/
โดยคลิก Add Publisher และระบุข้อมูล ดังภาพนี้ครับ จากนั้นกดปุ่ม Publish ได้เลยครับ

4.7 ข้อความก็จะไปปรากฏที่หน้าต่างของ Client ที่ 1 ดังภาพนี้ครับ มาถึงขึ้นตอนนี้การทดสอบการใช้งาน MQTT สำเร็จแล้วครับ
ลอง Add publisher ตามที่ต้องการ และใส่ Payload ใหม่ ๆ ได้เลยครับ

5. ตอนนี้เราได้ติดตั้ง MQTT Broker สำเร็จแล้ว พร้อมที่จะรองรับการติดต่อจาก Client ของเราแล้วครับ
ดังนั้นบทความต่อไป ก้าวเข้าสู่ IOT – ตอนที่ 3 เราจะใช้ Arduino + ESP8266 เป็น Client เชื่อมต่อเข้าไปที่ MQTT Broker กันครับ

หมายเหตุ บทความนี้ยาวไปหน่อยนะครับ ผมพยายามลงขั้นตอนให้ระเอียดมากที่สุดเพื่อให้ทุกคนทำตามได้ง่าย ๆ ครับ
ขอบพระคุณครับ 😀

Next Step :
บทความต่อไป จะใช้ Arduino ติดต่อไปที่ Broker นะครับ โปรดติดตาม

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 11 : Tracking with GPS(GY-NE06MV2)

ในบทเรียนนี้จะแนะนำวิธีใช้ GPS Module GY-NE06MV2 นะครับ ซึ่งเอาไปประยุกต์ใช้ได้มากมาย หวังว่าจะมีประโยชน์กับทุกๆ คนครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2โมดูล GPS ควบคุมการบิน (GPS Module NEO6MV2 with Flight Control EEPROM MWC APM2.5 large antenna)1 ชิ้น
3สาย Jump ผู้ – เมีย4 เส้น
  

ให้ต่ออุปกรณ์ดังรูปต่อไปนี้

Coding กันเลย
1. เปิดโปรแกรม Arduino และ New File ขึ้นมาดังภาพที่ 1

ภาพที่ 1 แสดงการสร้างไฟล์ใหม่

2. พิมพ์ code โดยให้ download code here จากนั้นกดปุ่มบันทึกและตั้งชื่อตามที่ต้องการ

ภาพที่ 2 แสดงการบันทึก

3. สั่ง Compile code โดยใช้คลิกที่ปุ่ม Verify ตามภาพที่ 3

ภาพที่ 3 แสดงการ Verify และ Compile Sourcecode

4. สั่ง Deploy code ไปที่ Board Arduino ตามภาพที่ 4

ภาพที่ 4 แสดงการ Upload Program ไปที่ Board Arduino

5. แนะนำให้ Run ในที่โล่งแจ้ง และเมื่อ Run Program แล้วระบบจะแสดงผลลัพทธ์ดัง Video นี้
ให้ลองเอา ค่า Latitude และ Longitude ไปใส่ใน Google Map ดูครับ

6. ขั้นตอนที่ 6 ทดลองนำค่า ใส่ค่า ค่า Latitude และ Longitude จากรูปที่ 6 มาลองใส่ใน Google Map ดูครับ จะได้ผลดังภาพที่ 7 ครับ

ภาพที่ 6 แสดงข้อมูลค่า Latitude และ Longitude ที่จะนำมาใส่ใน google map


ภาพที่ 7 แสดงการค้นหาตำแหน่ง GPS ตามค่า Latitude และ Longitude ที่เราระบุ

หมายเหตุ 1. Google รองรับการใส่ค่า Latitude และ Longitude ได้ หลายรูปแบบดังนี้ ทดลองใช้งานดูนะครับ

หมายเหตุ 2. ความหมายของค่าที่ GPS Module ส่งให้กับ Board ให้ลองอ่านที่ URL นี้ครับ
ให้ข้อมูลไว้ครบถ้วนดีครับ

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

การ Update Firmware สำหรับ ESP01

Starter 03 : การ Update Firmware สำหรับ ESP01

ในบทความนี้จะสอน Maker ท่านใหม่ๆ ในการ Update Firmware สำหรับ ESP8266 – ESP01 ครับ

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2ESP8266-ESP011 ตัว

เริ่มกันเลย
1. ในกรณีที่เราสั่งซื้อ Board ต่าง ๆ มาและเราต้องการ Update Firmware เพื่อให้ Board
สามารถใช้ Function ใหม่ได้ รวมถึง Fix Bug ที่ใน Version ก่อน ๆ เราจำเป็นต้อง Update
Firmware เข้าไปที่ตัว Board นั้น ๆ ครับ ในตัวอย่างนี้ขอใช้บอร์ด ESP01 เป็นตัวอย่างนะครับ
ให้ต่ออุปกรณ์ดังรูปนี้ครับ

ภาพที่ 1 แสดงการต่อวงจร

2. Download Firmware ที่ต้องการติดตั้งมาไว้ในเครื่องคอมพิวเตอร์ของเราก่อนโดย Click ที่นี่ได้เลยครับ เมื่อ Download มาแล้วให้แตกไฟล์ไว้ใน Folder ในเครื่องคอมพิวเตอร์ของเรา ดังภาพที่ 2

ภาพที่ 2 แสดงไฟล์ที่ได้ Download มาและแตกไฟล์ไว้ในเครื่อง

3. Download โปรแกรมสำหรับ Update Firmware มาติดตั้งที่เครื่องคอมพิวเตอร์ของเราครับ

4. จากข้อสาม แตกไฟล์ที่ download มาและเปิดโปรแกรมขึ้นมาได้เลยครับ

ภาพที่ 4 แสดงการเปิดโปรแกรม

5. จากภาพที่ 4 คลิกที่ปุ่ม ESP8266 Download Tool จะปรากฏหน้าต่างด้านล่าง

ภาพที่ 5 แสดงหน้าต่างสำหรับ Update Firmware

6. จากภาพที่ 5 ในกล่องสีแดงด้านบนให้กำหนด Path ของ Binary File ที่ต้องการ Update ไปที่ Firmware ของ ESP8266 โดยให้กำหนดค่าดังนี้

Binary File NameBinary File LocationESP-01 Flash Address
blank.binPath ในเครื่อง คอมพิวเตอร์ของเรา…\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin0xFB000
esp_init_data_default.bin…\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin0xFC000
blank.bin…\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin0x7E000
blank.bin…\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin0xFE000
boot_v1.6.bin…\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin0x00000
user1.1024.new.2.bin…\esp8266_nonos_sdk_v2.0.0_16_08_10\ESP8266_NONOS_SDK\bin\at\512+5120x01000

7. จากภาพที่ 5 ตรวจสอบ COM Port ของเราให้ถูกต้องจากนั้นกด Start ได้เลยครับ ระบบจะทำการ Update Library ไปที่บอร์ด ESP8266 ให้เราครับ

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Workshop Arduino เบื้องต้น ฟรี

#อบรมอาดุยโน่ฟรี!!! จุดเริ่มต้นของการเป็นผู้สร้าง เริ่มที่นี่ !!!
วัน-เวลา  : 22 กรกฎาคม เวลา 9:00 – 12:00
สถานที่   : Cafe Amazon Ptt หลักสี่-แจ้งวัฒนะ แจ้งวัฒนะ, กรุงเทพมหานคร 10210

เราจะจัดคอร์สอบรมให้ลูกค้าครั้งละ 8-10 ท่าน ตามลำดับก่อนหลัง หมดเขตรับสมัคร 15 กรกฏาคม 2017 เท่านั้น(ประกาศรายชื่อวันที่ 16 กรกฏาคม 2017)

สิ่งที่ท่านจะได้รับ
1. ความรู้เกี่ยวกับการใช้งานบอร์ด Arduino เบื้องต้น
2. การใช้งาน Arduino IDE เบื้องต้น
3. ความรู้และอุปกรณ์การเชื่อมต่อ Arduino กับ Shield และ Module ต่าง ๆ เช่น Buzzer, Switch, LED,7 Segment เป็นต้น
4. กาแฟหรือเครื่องดื่มอเมซอล ฟรี 1 แก้ว!!!

สิ่งที่ท่านต้องเตรียมมา
1. Arduino UNO Board + USB Cable
2. Notebook

แล้วมาสนุกกับ Arduino ด้วยกันนะครับ เหล่าผู้สร้างทุกท่าน 🙂

ลงทะเบียนและขอข้อมูลเพิ่มเติม Click เลย

Lesson 10 : เล่นกับกล้อง CMOS OV7670

ในบทเรียนนี้จะแนะนำวิธีใช้ Module CMOS OV7670 นะครับ ซึ่งเอาไปประยุกต์ใช้ได้มากมาย หวังว่าจะมีประโยชน์กับทุกๆ คนครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2Bread Board1 ชิ้น
3สาย Jump ผู้ – เมีย20 เส้น
4โมดูลกล้อง CMOS คุณภาพสูง ความละเอียด 640*480 pixcel พร้อมระบบอัตโนมัติในการปรับแสง1 ตัว
5ตัวต้านทาน 10k โอม2 ตัว
6ตัวต้านทาน 4.7k โอม2 ตัว
7สาย Jump แบบผู้ – ผู้10 เส้น

ให้ต่ออุปกรณ์ดังรูปต่อไปนี้

Coding กันเลย
1. เปิดโปรแกรม Arduino และ New File ขึ้นมาดังภาพที่ 1

ภาพที่ 1 แสดงการสร้างไฟล์ใหม่

2. พิมพ์ code โดยให้ download code here จากนั้นกดปุ่มบันทึกและตั้งชื่อตามที่ต้องการ

ภาพที่ 2 แสดงการบันทึก

3. สั่ง Compile code โดยใช้คลิกที่ปุ่ม Verify ตามภาพที่ 3

ภาพที่ 3 แสดงการ Verify และ Compile Sourcecode

4. สั่ง Deploy code ไปที่ Board Arduino ตามภาพที่ 4

ภาพที่ 4 แสดงการ Upload Program ไปที่ Board Arduino

5. ขั้นตอนนี้จะเป็นการสั่ง run Java Code โดยให้ Download class ตาม Link นี้ครับ
download จากนั้นแตกไฟล์วางไว้ใน Path ที่ต้องการ ดังภาพที่ 5


ภาพที่ 5 แสดงการวาง class สำหรับ บันทึกภาพจากกล้อง

6. Run Class ImageBWWriter โดยให้เสียบสาย USB ต่อกับ Board Arduino และ Run Arduino ให้เรียบร้อยก่อนนะครับ วิธีการ Run Class ให้พิมพ์คำสั่งนี้ ที่ Command Prompt
“java ImageBWWriter COM5 1000000 320 240” ดังภาพที่ 6
โดย Parameter ที่ต้องส่งเข้าไปมี 4 ตัวประกอบด้วย
– COM5 หมายถือชื่อ Port ที่ Arduino ติดต่ออยู่
– 1000000 หมายถึงความถี่ของ Baudrate
– 320 หมายถึงความกว้างของภาพที่ส่งเข้ามาจาก Arduino
– 240 หมายถึงความยาวของภาพที่ส่งเข้ามาจาก Arduino

ภาพที่ 6 แสดงการรัน Class Java เพื่อรอรับค่าจาก Serial Port

ไฟล์ภาพที่บันทึกจะเป็นนามสุกล PGM ซึ่งเป็นไฟล์ที่มีพื้นฐานง่าย ๆ เก็บรูปขาวดำ เป็นลักษณะจุดต่อจุด รูปแบบไฟล์ประมาณนี้ครับ
– 4 บรรทัดบนสุดเป็น Header ของไฟล์
– ตัวเลขแต่ละช่องจะเป็น ค่า GrayScale ของจุด Pixcel นั้น ๆ
– ดังนั้นถ้ารูปภาพของเรามีขนาด 320*240 Pixcel ก็จะต้องมีตัวเลขจำนวน 76,800 เลข เพื่อแสดงรูปให้สมบูรณ์ทุกจุด Pixcel
– ผมเลือกใช้ File นามสกุลนี้ เพราะสามารถเอาไปประยุกต์ใช้งาน Image Processing ได้ง่ายกว่า ซึ่งผมจะทำเป็น Tutorial ต่อไปครับ
– ศึกษาเพิ่มเติมเกี่ยวกับ PGM File ที่นี่ครับ Click

7. ดูผลลัพธ์ที่ Folder C:/Output จะเห็นไฟล์รูปภาพถูกสร้างไว้ดังภาพที่ 7 ครับ

ภาพที่ 7 แสดง Output ของไฟล์ภาพจากกล้อง OV7670


ภาพที่ 8 ตัวอย่างการถ่ายภาพจาก OV7670

หมายเหตุ 2 หากเรียก Java ไฟล์ จาก Command Prompt แล้ว มี Error แจ้งว่าหา Method Main ไม่พบ
“Error: Could not find or load main class ImageBWWriter.class”

ให้เรียกโดยใช้คำสั่งตามรูปนี้นะครับ
Java -classpath “ที่อยู่ของไฟล์ jssc.jar” “package ของ class ImageBWWriter”

โดยการวางไฟล์ลองวางตาม Path นี้ครับ

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 09 : ก้าวเข้าสู่ IOT – ตอนที่ 1 สั่งเปิดปิด LED ผ่าน Web Browser

ในบทเรียนนี้จะสอนให้น้องๆ เรียนรู้การใช้งานโปรแกรม Arduino ยากขึ้นไปอีกระดับ โดยในบทเรียนนี้จะประมวลความรู้หลายๆ ส่วนประกอบกัน เพื่อควบคุม Arduino ผ่าน Web Browser ให้เปิดปิดไฟ LED จากหน้าเว็บครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2สาย Jump ผู้ – เมีย8 เส้น
3สาย Jump ผู้ – ผู้9 เส้น
4โมดูลรับส่งสัญญาณ Wifi(ESP8266(ESP01) Serial Wireless WIFI Module)1 ชุด
5ตัวต้านทาน 330 โอม1 ตัว
6ไฟ LED1 ดวง

การต่ออุปกรณ์แบ่งเป็นสองขั้นตอน โดยให้ต่อ Module รับส่งสัญญาณ Wifi(ESP8266) กับ Breadboard ดังภาพนี้ก่อนครับ

จากนั้นนำ Board Arduino UNO R3 ต่อเข้ากับ Breadboard ดังภาพนี้ครับ

ทำความเข้าใจ Module ESP8266 กันก่อน
Module ESP8266 มีบอร์ดหลายตัวอยู่ใน Series นี้ ที่เราจะใช้ในบทความนี้ เป็น Module ESP-01 ซึ่งเป็น Module เบื้องต้นในการใช้งาน สำหรับรายละเอียดเกี่ยวกับ ESP8266 สามารถอ่านเพิ่มเติมได้ที่ https://en.wikipedia.org/wiki/ESP8266 นะครับ สำหรับองค์ประกอบของ Module ESP-01 จะมีขาสำหรับเชื่อมต่อดังนี้

หากดูจากรูปที่ผมให้เชื่อมต่อกับ Breadboard ผมอยากให้ทุกท่านเสียบสาย Pin ของทุกขาลงไปที่ Breadboard ก่อนครับ โดยเรียงเป็นแนวนอน และพยายามใช้สีที่ต่างกัน เวลาเราใช้งานเราจะได้ไม่งงครับ เพราะมันเป็นไปได้ว่าเราอาจต้องมีการถอดสาย VCC เพื่อ Reset ฺBoard ESP8266 ด้วย และเท่าที่ผมเคยใช้งานมา Board ตัวนี้จะมีปัญหาจุกจิกค่อนข้างเยอะนะครับ ดังนั้นเราต่อสาย Pin ให้ชัดเจนก่อนจะทำให้เราแก้ปัญหาได้ง่ายขึ้นครับ

ระวังเรื่องความร้อนด้วยนะครับ บอร์ดตัวนี้จะมีปัญหาเรื่องความร้อน ดังนั้นเราไม่ควรใช้งานนานเกินไปครับ

Coding กันเลย
1. เตรียม Library ให้ Arduino IDE รู้จักกับ Module ESP8266 ก่อนโดยเมื่อเปิด Aruino IDE ขึ้นมาแล้วให้เลือกที่เมนู File -> Preferences ดังภาพที่ 1

ภาพที่ 1 เลือกเมนู Preferences เพื่อไปเพิ่ม Board ESP8266

2. ที่ช่อง Additional Boards Manager URL ให้ใส่ค่า “http://arduino.esp8266.com/stable/package_esp8266com_index.json” จากนั้นกดปุ่ม OK ดังภาพที่ 2

ภาพที่ 2 แสดงการกำหนดค่า Boards Manager

3. ทำการ Install Board โดยคลิกที่ Tools -> Baords -> Board Managers… ระบบจะเปิดหน้าต่าง Board Manager ขึ้นมา

ภาพที่ 3 แสดงการเปิดหน้าต่าง Board Manager

4. ที่หน้าต่าง Boards Manager ให้เลื่อนหา Board ที่ชื่อว่า ESP8266 จากนั้นกดปุ่ม Install ดังภาพที่ 4

ภาพที่ 4 แสดงปุ่ม Install Board Library

5. เมื่อ Install เรียบร้อย Arduino IDE ของเรา ก็จะมีLibrary เกี่ยวกับ Board ESP8266 มาให้เราเลือกใช้ ดังภาพที่ 5

ภาพที่ 5 แสดง Library ที่เกี่ยวข้องกับ ESP8266 ให้เราเลือกใช้งาน

6. ให้ Copy Code (Download)ด้านล่างนี้ไปวางที่ Arduino IDE แล้วกด Verify ครับ หาก Compile ไม่ผ่าน ให้ Restart เครื่องคอมพิวเตอร์ของท่านครับ เป็นไปได้ว่า Arduino IDE อาจยังมองไม่เห็น Library ที่ลงไปใหม่

/**
* @desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, ESP8266
* รวมทั้งการใช้งาน IOT เพื่อควบคุม LED ผ่านทาง Web Browser
* @author Prayoon V.,
* Email : themakerthailand@hotmail.com
* Facebook : @MrMakerThailand
*/#include
#include

//กำหนดค่า Config สำหรับ Access point ของเรา
const char* ssid = “ESP”; //ชื่อ Access point
const char* password = “123456789”; //Password สำหรับให้ Client เช่นโทรศัพท์มือถือ เข้ามาเชื่อมต่อ

//หน้า HTML Form ง่าย ๆ สำหรับสั่งเปิดปิดไฟ

//ประกาศตัวเองเป็น Web Server
ESP8266WebServer server(80);

//Pin ที่ต่อไฟ LED
const int led = 2;

/**
* function handle_led
* @desc สำหรับจัดการให้ไฟติด หรือ ดับ และ Write ข้อความออกที่หน้าเว็บไซต์
*/
void handle_led() {
// get the value of request argument “state” and convert it to an int
// อ่านค่า State จาก Argument ที่ส่งผ่านเข้ามาทาง URL
int state = server.arg(“state”).toInt();

//สั่งให้ไฟติด-ดับ ตามค่าของ State
digitalWrite(led, state);

//Write html บอกว่าขณะนี้ไฟอยู่ที่ State อะไร
server.send(200, “text/plain”, String(“LED is now : “) + ((state)?”on”:”off”));

server.send(200, “text/html”, form);
}

void setup(void) {
Serial.begin(115200);
pinMode(led, OUTPUT);

//สร้างตัวเองเป็น Access Point
WiFi.softAP(ssid, password);

//กำหนด Function เมื่อมี Client ต่อเข้ามาที่ Root ให้แสดงหน้าตาเว็บไซต์โดยดึงจากตัวแปร Form
server.on(“/”, [](){
server.send(200, “text/html”, form);
});

//กำหนด Function เมื่อมี Client ต่อเข้ามาที่ URL Path /led ให้เรียก Method handle_led
server.on(“/led”, handle_led);

// Start the server
server.begin();
}

void loop(void) {
// check for incoming client connections frequently in the main loop:
server.handleClient();
}
testscrolltext(); //แสดงข้อความ Text ที่แบบเคลื่อนไหว
}

7. เสียบสาย USB จาก Board Arduino และ Upload Code ขึ้นไปได้เลยครับ การ Upload Code ไปที่ Board ESP8266 หากสำเร็จจะขึ้นดังภาพที่ 6 นี้ครับ หากไม่สำเร็จให้ข้ามไปดูท้ายบทความนี้ ผมสรุปวิธีแก้ไว้ให้แล้วครับ

ภาพที่ 6 แสดงการ upload ขึ้นไปที่ ESP8266 ได้สำเร็จ

8. มาถึงจุดนี้ เมื่อเราดูที่ Wifi Station จะเห็นเสา Wifi ที่ชื่อว่า ESP ดังภาพที่ 7 ให้ลองเชื่อมต่อที่เสาสัญญาน Wifi ตัวนี้ดูครับ โดยใส่รหัสผ่านเป็นค่าที่อยู่ใน Code Arduino IDE ซึ่งผมกำหนดไว้เป็น 123456789

ภาพที่ 7 แสดงเสาสัญญาน Wifi ชื่อ ESP ซึ่งเป็นเสาจาก Board ESP8266

9. ให้เปิด Web Browser ไปที่ URL 192.168.4.1 จะพบหน้าจอดังภาพที่ 8

ภาพที่ 8 แสดงหน้าจอเว็บ Browser เมื่อต่อมาที่ ip 192.168.4.1

10. ลองเลือกเป็น On และกดปุ่ม Submit ดูครับ ท่านจะเห็น ไฟ LED ติดขึ้นมา และเมื่อเลือกเป็น Off ท่านจะเห็นไฟ LED ดับลง (ผมจะลง Video ให้ภายหลังนะครับ)

*** แก้ปัญหาในกรณีที่ Upload Code ขึ้น Board ไม่ได้ หาก Board ของท่านขึ้น Error ดังนี้
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
ให้ทำดังนี้
1. ลองถอดสาย VCC ออกจาก Board ESP8266 และกด Upload จากนั้นเสียบสาย VCC เข้า Board ESP8266 จากนั้นกดปุ่ม Upload
2. ลองถอดสาย VCC ออกจาก Board ESP8266 จากนั้นเปิดหน้าต่าง IDE ใหม่ โดยให้เปิด Code Blink จากเมนู File-> Examples-> 01. Basic -> Blink กดปุ่ม Upload ผลที่ได้จะ Error เหมือนเดิมไม่ต้องสนใจครับ ให้เสียบสาย VCC เข้า Board ESP8266 เหมือนเดิมและย้อนมาที่หน้าต่าง IDE ของเราจากนั้นกดปุ่ม Upload ดูครับ
3. หากยังทำไม่ได้ ลองถ่ายรูป Error และส่งมาที่ Inbox ของ Facebook MrMakerThailand ครับ ผมกับทีมงานจะเข้าไปแก้ปัญหาให้ครับ

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

การติดตั้ง External Library ใน Arduino IDE

Starter 02 : การติดตั้ง External Library ใน Arduino IDE

ในบทความนี้จะสอน Maker ท่านใหม่ๆ ในการติดตั้ง Library ใหม่ๆ ลงใน Arduino IDE นะครับ

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2สาย USB1 เส้น

เริ่มกันเลย
1. เมื่อต้องการให้ Arduino IDE มองเห็น Library อื่น ๆ เพิ่มเติม เราต้องเพิ่ม Library นั้น ๆ เข้าไปที่ Arduino IDE เราจะเริ่มต้นด้วยการ Download หรือ Copy Library นั้น ๆ มาไว้ในเครื่องก่อน ดังภาพที่ 1

ภาพที่ 1 แสดง Library ที่ต้องการติดตั้ง

2. เมื่อเปิดโปรแกรม Arduino IDE ขึ้นมาแล้วให้ไปที่เมนู Sketch -> Include Library -> Add .ZIP Library… ดังภาพที่ 2

ภาพที่ 2 แสดงไฟล์ที่ได้ Download มาให้ Double Click เพื่อเปิดไฟล์

3. เลือกไฟล์ที่ต้องการติดตั้ง และกดปุ่ม Open ดังภาพที่ 3

ภาพที่ 3 เลือกไฟล์ที่ต้องการติดตั้งและกด Open

4. ระบบจะทำการติดตั้ง Library ที่เลือกไว้ และแสดงข้อความดังภาพที่ 4

ภาพที่ 4 แสดงข้อความว่าเพิ่ม Library สำเร็จแล้ว

5. เมื่อเปิด Arduino IDE ขึ้นมาที่เมนู Sketch -> Include Library -> จะเห็น Library ที่เราติดตั้ง

ภาพที่ 5 แสดง Library ที่ติดตั้งลงใน IDE สำเร็จแล้ว

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 08 : เล่นกับจอ OLED กันครับ

ในบทเรียนนี้จะสอนให้น้องๆ เรียนรู้การใช้งานโปรแกรม Arduino ยากขึ้นไปอีกระดับ โดยเราจะควบคุมจอ OLED ขนาด 0.97” ให้แสดงข้อความ รวมถึงรูปภาพ ตามที่เราต้องการ บทความนี้จะต้องใช้ External Library เพิ่มเติมด้วยซึ่งเราต้องไป Download มาติดตั้งก่อน ลองศึกษาวิธีการติดตั้ง External Library หรือคลิกที่นี่ นะครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2สาย Jump ผู้ – เมีย4 เส้น
3จอ OLED 0.96 นิ้ว พร้อม interface I2C IIC SPI ให้ท่านได้ใช้งานง่าย(สีขาว)1 ชุด

ให้ต่ออุปกรณ์ดังรูปต่อไปนี้

Coding กันเลย
1. เตรียม Library สำหรับสั่งการ OLED 0.96” ก่อนนะครับ โดยให้ไปที่ URL https://github.com/adafruit/Adafruit-GFX-Library และ Download Library มาดังภาพที่ 1 หรือคลิก Download ที่ Link(Adafruit_SSD1306, Adafruit-GFX-Library-master) นี้ได้เลยครับ ให้ Download มาทั้งสองตัวนะครับ

ภาพที่ 1 แสดงการ Download Library สำหรับใช้งาน

2. ติดตั้ง Library ที่ Download มาแล้ว ที่ Arduino IDE ซึ่งสามารถดูวิธีการติดตั้งได้ที่ “การติดตั้ง External Library ใน Arduino IDE” ซึ่งเมื่อติดตั้งเสร็จแล้ว ให้ลองเปิดเมนู ดังภาพที่ 2 จะเห็น Library Adafruit_SSD1306, Adafruit-GFX ที่ติดตั้งแล้ว

3. เปิดโปรแกรม Arduino และ New File ขึ้นมาดังภาพที่ 3

ภาพที่ 3 แสดงการสร้างไฟล์ใหม่

4. พิมพ์ code ตามภาพที่ 4 (download code here) จากนั้นกดปุ่มบันทึกและตั้งชื่อตามที่ต้องการ

/**
* @desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, OLED, Adafruit Library
* @author Prayoon V.,
* Email : themakerthailand@hotmail.com
* Facebook : @MrMakerThailand
*/#include
#include
#include
#include
#include
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define POS_X 0
#define POS_Y 1

//กำหนดความกว้าง ความยาว ของรูปที่ต้องการ
#define IMG_HEIGHT 32
#define IMG_WIDTH 32
//แปลงรูปให้เป็น byte array ใช้โปรแกรมที่ http://themakerthailand.com/convertImageToByte.html
static const unsigned char PROGMEM IMG_DATA[] = {

0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0x8f, 0x8f, 0xff, 0xed, 0xb3, 0x00, 0x03,
0xec, 0x3b, 0x00, 0x03, 0xef, 0xfb, 0x88, 0x7f, 0xf3, 0xcf, 0xfb, 0x7f, 0xfd, 0xdf, 0xfb, 0x7f,
0xfd, 0xdf, 0xfb, 0x7f, 0xfd, 0xdf, 0xfb, 0x7f, 0xfd, 0xdf, 0xfb, 0x7f, 0xfd, 0xdf, 0xfb, 0x7f,
0xfb, 0xdf, 0xfb, 0x7f, 0xfb, 0xdf, 0xfb, 0x7f, 0xfb, 0xef, 0xfb, 0x3f, 0xfa, 0x6f, 0xf7, 0xbf,
0xf9, 0x4f, 0xf3, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0x82, 0x9d, 0x68, 0x91, 0xda, 0x9d, 0x6d, 0x93, 0xda, 0xba, 0x56, 0xb5, 0xff, 0xdf, 0xff, 0xdf,
0xff, 0xff, 0xff, 0xff, 0xdd, 0xed, 0x6d, 0xff, 0xed, 0x6d, 0x6c, 0xdb, 0xed, 0x55, 0x76, 0x5b,
0xed, 0x15, 0x11, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
};

void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3c); //initialize I2C addr 0x3c

}

void testscrolltext(void) {
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10,0);
display.clearDisplay();
display.println(“The Maker Thailand”);
display.display();
delay(1000);

display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
}

void loop() {

//แสดงข้อความบรรทัดที่ 1
display.clearDisplay(); //ล้างหน้าจอ
display.setCursor(0,0);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“The Maker Thailand”);

//แสดงข้อความบรรทัดที่ 2
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(“We are made the maker”);

//แสดงข้อความบรรทัดที่ 3
display.setTextSize(1);
display.println(“www.TheMakerThailand.com”);
display.setTextColor(BLACK,WHITE);
display.display();

//ค้างที่ข้อความสามบรรทัดนี้ 5 วินาที
delay(5000);

//วาดรูปโดยเริ่มที่ Pixel ตำแหน่ง x=50, y=0
display.clearDisplay(); //ล้างหน้าจอ
display.drawBitmap(50, 0, IMG_DATA, IMG_WIDTH, IMG_HEIGHT, WHITE);
display.display();
//ค้างการแสดงรูปนี้ 10 วินาที
delay(10000);

display.clearDisplay();
testscrolltext(); //แสดงข้อความ Text ที่แบบเคลื่อนไหว
}

ภาพที่ 4 แสดง Sourcecode


ภาพที่ 5 แสดงการบันทึก

สั่ง Compile code โดยใช้คลิกที่ปุ่ม Verify ตามภาพที่ 6

ภาพที่ 6 แสดงการ Verify และ Compile Sourcecode

สั่ง Deploy code ไปที่ Board Arduino ตามภาพที่ 7

ภาพที่ 7 แสดงการ Upload Program ไปที่ Board Arduino

7. ดูผลลัพธ์จะเห็น OLED แสดงข้อความ รูปภาพ และตัววิ่ง ดัง Video นี้ครับ

ภาพที่ 8 แสดง Video การทำงานของ OLED

8. ทดลองเปลี่ยนรูปดูครับ โดยเราจะต้องแปลงรูปเป็น Byte Character ก่อน ซึ่งจะทำได้ดังนี้ครับ
8.1 ให้เตรียมรูปที่ต้องการแสดง โดยย่อให้มีขนาด 32 pixel x 32 Pixel ครับ จากนั้นเปิด URL http://themakerthailand.com/convertImageToByte.html แนบรูปที่ต้องการ จากนั้นกดแปลง ดังภาพที่ 9

ภาพที่ 9 แสดงการแปลงรูปภาพ เป็น Byte Array

8.2 นำ Byte Array ที่ Copy ได้ไปใส่ใน Arduino IDE ดังภาพที่ 10

ภาพที่ 10 แสดงตำแหน่งที่ต้องแก้ข้อมูลรูปภาพ

9. ลอง Upload Code ขึ้น Arduino Board ใหม่ จะเห็นการแสดงภาพที่ต่างออกไป

ภาพที่ 11 แสดงรูปที่ได้มีการเปลี่ยนแปลงแล้ว

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 07 : จับขโมยโดยใช้ Infrared Sensor

ในบทเรียนนี้จะสอนให้น้องๆ เรียนรู้การรับค่าจาก Infrared Sensor นะครับ โดย Sensor ตัวนี้จะให้ค่าเป็น
High เมื่อจับเจอการเคลื่อนไหวข้างหน้ามันครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2สาย Jump ผู้ – ผู้3 เส้น
3โมดูลตรวจจับความเคลื่อนไหว (mini ir pyroelectric infrared human body sensor)1 ชุด

ให้ต่ออุปกรณ์ดังรูปต่อไปนี้

Coding กันเลย
เปิดโปรแกรม Arduino และ New File ขึ้นมาดังภาพที่ 1

ภาพที่ 1 แสดงการสร้างไฟล์ใหม่

พิมพ์ code ตามภาพที่ 2 (download code here) จากนั้นกดปุ่มบันทึกและตั้งชื่อตามที่ต้องการ

/**
* @desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino
* และ โมดูลตรวจจับความเคลื่อนไหว (mini ir pyroelectric infrared human body sensor)
* @author Prayoon V.,
* Email : themakerthailand@hotmail.com
* Facebook : @MrMakerThailand
*///กำหนดหมายเลข PIN แสดงไฟ LED
int LED_PIN = 13;
//กำหนดหมายเลข PIN รับค่าจาก Sensor
int INPUT_PIN = 8;
//ค่าตั้งต้นของการรับค่า Sensor
int STATE = LOW;
//ตัวแปรเก็บค่าที่อ่านจาก sensor
int val = 0;

void setup() {
//กำหนดให้ Arduino Board รับทราบว่าหมายเลข LED สำหรับแสดงค่าคือ 13
pinMode(LED_PIN, OUTPUT);
//กำหนดให้ Arduino Board รับทราบว่า Pin หมายเลข 8 คือรับค่าจาก Sensor
pinMode(INPUT_PIN, INPUT);
Serial.begin(9600);
}

void loop() {
//อ่านค่าจาก Sensor
val = digitalRead(INPUT_PIN);

//ค่าเป็น HIGH ให้แสดงไฟ LED
if(val == HIGH) {
digitalWrite(LED_PIN, HIGH);

//ถ้า STATE มีการเปลี่ยนให้ Write Message ออกมาหนึ่งบรรทัด
if(val != STATE){
Serial.println(“Detect something”);
STATE = val;
}
}else{
//ค่าเป็น LOW ให้ปิดไฟ LED
digitalWrite(LED_PIN, LOW);

//ถ้า STATE มีการเปลี่ยนให้ Write Message ออกมาหนึ่งบรรทัด
if(val != STATE){
Serial.println(“Not detect something”);
STATE = val;
}
}
}

ภาพที่ 2 แสดง Sourcecode


ภาพที่ 3 แสดงการบันทึก

สั่ง Compile code โดยใช้คลิกที่ปุ่ม Verify ตามภาพที่ 4

ภาพที่ 4 แสดงการ Verify และ Compile Sourcecode

สั่ง Deploy code ไปที่ Board Arduino ตามภาพที่ 5

ภาพที่ 5 แสดงการ Upload Program ไปที่ Board Arduino

ดูผลลัพธ์จะเห็นการทำงานของ Infrared Sensor เมื่อจับวัตถุได้ ดัง Video นี้ครับ

ภาพที่ 6 แสดง Video การทำงานของ Infrared Sensor เมื่อจับวัตถุได้

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Lesson 06 : หมุนมอเตอร์กันเถอะ

ในบทเรียนนี้จะสอนให้น้องๆ เรียนรู้การประกาศฟังก์ชันใช้งานเอง โดยสั่งให้มอเตอร์ทำงาน หมุนตามที่เราต้องการนะครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์
ลำดับ ชิ้นส่วน จำนวน
1 Board Arduino UNO 1 ชิ้น
2 สาย Jump ผู้ – เมีย 6 เส้น
3 Stepper Motor 28BYJ-48 With Drive Test Module Board ULN2003 5 Line 4 Phase 5V 1 ชุด

ให้ต่ออุปกรณ์ดังรูปต่อไปนี้

Coding กันเลย
เปิดโปรแกรม Arduino และ New File ขึ้นมาดังภาพที่ 1

ภาพที่ 1 แสดงการสร้างไฟล์ใหม่

พิมพ์ code ตามภาพที่ 2 (download code here) จากนั้นกดปุ่มบันทึกและตั้งชื่อตามที่ต้องการ

/**
* @desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, Stepper Motor 28BYJ-48 With Drive Test Module Board ULN2003 5 Line 4 Phase 5V
* @author Prayoon V.,
* Email : themakerthailand@hotmail.com
* Facebook : @MrMakerThailand
*/#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11

void setup() {
//กำหนด PIN สำหรับส่งสัญญาณออก
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);

}

/**
* @Function : Motor_CCW
* @Desc : Function สำหรับสั่งให้ Motor หมุนทวนเข็มนาฬิกา
*/
void Motor_CCW()
{
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, HIGH);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);

delayMicroseconds(1150);

digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);

}

/**
* @Function : Motor_CW
* @Desc : Function สำหรับสั่งให้ Motor หมุนตามเข็มนาฬิกา
*/
void Motor_CW()
{
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, HIGH);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);

delayMicroseconds(1150);

digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);

delayMicroseconds(1150);
}

void loop(){
//สั่งให้ Motor หมุนตามเข็มนาฬิกา
for(int i = 0; i < 535; i++)
Motor_CW();

//สั่งให้ Motor หมุนทวนเข็มนาฬิกา
for(int i = 0; i < 535; i++)
Motor_CCW();

}

ภาพที่ 2 แสดง Sourcecode


ภาพที่ 3 แสดงการบันทึก

สั่ง Compile code โดยใช้คลิกที่ปุ่ม Verify ตามภาพที่ 4

ภาพที่ 4 แสดงการ Verify และ Compile Sourcecode

สั่ง Deploy code ไปที่ Board Arduino ตามภาพที่ 5

ภาพที่ 5 แสดงการ Upload Program ไปที่ Board Arduino

ดูผลลัพธ์จะเห็นมอเตอร์หมุนตามเข็มนาฬิกา 1 รอบและทวนเข็มนาฬิกา 1 รอบ ดัง Video นี้ครับ

ภาพที่ 6 แสดง Video ผลการหมุนมอเตอร์

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้อง ๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ

Test The Board : ทดสอบบอร์ดใหม่กันครับ

Starter 01 : ทดสอบบอร์ดใหม่กันครับ

ในบทความนี้จะสอน Maker ท่านใหม่ๆ ในการใช้งาน Board Arduino ครั้งแรกกันครับ

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์

ลำดับชิ้นส่วนจำนวน
1Board Arduino UNO1 ชิ้น
2สาย USB1 เส้น

เริ่มกันเลย
1. Download Arduino IDE จากเว็บไซต์ www.arduino.cc หรือคลิกที่นี่ได้เลยครับ
เมื่อ Browser เปิด URL ขึ้นมาแล้วให้เลือก Download Windows Installer ดังภาพที่ 1


ภาพที่ 1 แสดงการ Download Arduino IDE

2. เมื่อ Download เสร็จแล้วให้เปิดไฟล์ที่เรา Download (Double Click) ดังภาพที่ 2 ระบบจะแสดงหน้าต่างแสดงข้อความเกี่ยวกับ License Agreement ต่าง ๆ ให้เรากด I Agree (ภาพที่ 3) หลังจากนั้นระบบจะแสดงหน้าต่างเพื่อถามเราว่าต้องการติดตั้ง Component ใดบ้าง ให้เราเลือกทุกรายการและกดปุ่ม Next ดังภาพที่ 4


ภาพที่ 2 แสดงไฟล์ที่ได้ Download มาให้ Double Click เพื่อเปิดไฟล์


ภาพที่ 3 แสดงหน้าต่าง License Agreement ให้กด I Agree


ภาพที่ 4 แสดง Component ที่ต้องการ Install ให้เลือกทั้งหมดและกด Next

3. เลือก Path ที่ต้องการติดตั้ง และกดปุ่ม Install

ภาพที่ 5 เลือก Path ที่ต้องการติดตั้งและกด Install

4. ระบบจะติดตั้ง Arduino IDE เรียบร้อย พร้อมทั้ง Shortcut ที่ Desktop ให้เปิด โปรแกรม Arduino IDE ขึ้นมา

ภาพที่ 6 แสดงการเปิดโปรแกรมจาก Start Menu

5. เมื่อเปิด Arduino IDE ขึ้นมาแล้วให้ลองเปิด Example Sourcecode ที่ติดมากับ IDE
เพื่อทดลองได้เลยครับ โดยให้คลิกที่ File -> Examples -> 0.1 Basics -> Blink ดังภาพที่ 7 โดย Code Blink นี้จะทำให้ไฟ LED ที่ติดมากับ Board นั้นกระพริบทุก ๆ 1 วินาที โดยที่เราไม่ต้องต่อ Hardware ใด ๆ ครับ

ภาพที่ 7 แสดงการเปิด Source Code Blink เพื่อทดสอบ Board

6. เชื่อมต่อ Arduino Board เข้ากับคอมพิวเตอร์ผ่านสาย USB ดังภาพที่ 8 จะเห็นไฟ ON ที่ Arduino ติดเป็นสีเขียว และที่ Arduino IDE จะแสดง Port ที่ต่อกับ Arduino ดังภาพที่ 9

ภาพที่ 8 แสดงไฟสีเขียวติดตำแหน่ง On


ภาพที่ 9 แสดง Port ที่เชื่อมต่อกับ Arduino

หมายเหตุ หมายเลข Port นี้อาจผิดได้นะครับ เนื่องจาก IDE จะไม่ได้ Update Port แบบ Real Time ดังนั้นเราสามารถไปเปลี่ยน Port ที่ต่อได้เองครับที่เมนู Tool->Port นะครับ ดังภาพนี้ครับ

ภาพที่ 10 แสดง Function การเปลี่ยน Port ที่ต่อกับ Arduino

7. ทดลอง Verify Source Code ก่อนดังภาพที่ 11 การ Verify นี้จะเป็นการสั่ง Compilance Source Code เพื่อตรวจสอบความถูกต้องก่อน แต่ยังไม่ได้ทำการ Upload ไปยังตัว Board

ภาพที่ 11 การ Verify Source Code

8. Upload Source Code ได้เลยครับดังภาพที่ 12 เมื่อกดปุ่ม Upload แล้วให้สังเกตุที่ Board จะเป็นไฟ RX และ TX ติด กระพริบ ๆ แสดงว่า Board กำลังรับส่งข้อมูลกับเครื่องคอมพิวเตอร์อยู่ครับ หากไฟสองดวงนี้ดับลงแล้ว ให้สังเกตุที่ Arduino IDE จะขึ้นข้อความ Done Uploading ดังภาพที่ 13

ภาพที่ 12 แสดงการกดปุ่ม Upload


ภาพที่ 13 แสดงข้อความ Done Uploading แสดงว่าการส่งข้อมูลไปที่ Board เรียบร้อย

9. ดูผลลัพธ์ จะเห็นไฟ LED กระพริบทุก ๆ 1 วินาที ดัง Video ที่ 14 นี้ครับ

10. ลองแก้ Code เล็กน้อยครับเพื่อทดสอบว่า Arduino IDE นั้นได้ Upload Source Code ของเราขึ้นไปจริง ๆ โดยแก้ Delay เป็น 5000 ดังภาพที่ 15 นี้ครับ

11. ลองกด Upload อีกครั้งครับ ผลลัพธ์ที่ออกจะเห็นไฟกระพริบนั้นติด 1 วินาที และดับ 5 วินาที ดังตัวอย่างใน Video นี้ครับ

เอ๊ะ !! นี่มันคือ Board อะไรกันนะ ทำไมถึงใหญ่กว่า Arduino Uno ของเรา

!!!สำเร็จแล้ว!!!

หากยังติดปัญหาใด ๆ สามารถติดต่อทีมงานได้เลยนะครับ Click ที่นี่ Facebook MrMakerThailand ได้เลยครับ เราพร้อมจะแก้ปัญหาและช่วยสนันสนุนท่านเต็มที่ครับ ขอให้สนุกกับ Arduino ของท่านครับ 🙂

Lesson 05 : Remote Control ชุดใหญ่ไฟ LED

ในบทเรียนนี้จะสอนให้น้อง ๆ เรียนรู้การรับค่าจาก Remote Control แล้วให้ไฟ LED ติดตามปุ่มที่กดนะครับ

ระดับความยาก :  

สิ่งที่ต้องทราบก่อนเริ่มเรียน

สิ่งที่จะได้จากบทเรียนนี้

อุปกรณ์
ลำดับ ชิ้นส่วน จำนวน
1 Board Arduino UNO 1 ชิ้น
2 Bread Board 1 ชิ้น
3 สาย Jump ผู้ – ผู้ 17 เส้น
4 โมดูลรีโมทรับส่งสัญญาวิทยุ 4 ปุ่ม IC 2262/2272 4 CH 315Mhz Wireless Remote 1 ชุด
5 LED ต่างสี 4 ตัว
6 ตัวต้านทาน 330 โอม 4 ตัว

ให้ต่ออุปกรณ์ดังรูปต่อไปนี้

Coding กันเลย
เปิดโปรแกรม Arduino และ New File ขึ้นมาดังภาพที่ 1

ภาพที่ 1 แสดงการสร้างไฟล์ใหม่

พิมพ์ code ตามภาพที่ 2 (download code here) จากนั้นกดปุ่มบันทึกและตั้งชื่อตามที่ต้องการ

/**
* @desc Class นี้ใช้สำหรับเรียนรู้การทำงานเบื้องต้นของ Arduino, IC 2262/2272 4 CH 315Mhz Wireless Remote
* @author Prayoon V.,
* Email : themakerthailand@hotmail.com
* Facebook : @MrMakerThailand
*///กำหนดหมายเลข PIN รับค่าจาก Switch
#define A_BUTTON_PIN 11
#define B_BUTTON_PIN 10
#define C_BUTTON_PIN 9
#define D_BUTTON_PIN 8
#define SOME_BUTTON_PRESSED_PIN 12

//กำหนดหมายเลข PIN ส่งค่าออก LED
#define GREEN_LED_PIN 3
#define YELLOW_LED_PIN 4
#define RED_LED_PIN 5
#define BLUE_LED_PIN 6

//ระยะเวลาให้ไฟติดค้างไว้
#define DELAY 500

void setup() {
//กำหนดให้ Arduino Board รับทราบว่าหมายเลข PIN นี้เป็น PIN แบบ INPUT เพื่อรอรับค่าจาก Remote
pinMode(A_BUTTON_PIN,INPUT);
pinMode(B_BUTTON_PIN,INPUT);
pinMode(C_BUTTON_PIN,INPUT);
pinMode(D_BUTTON_PIN,INPUT);

//กำหนดให้ Arduino Board รับทราบว่า PIN นี้เป็น PIN แบบส่งค่าออก
pinMode(GREEN_LED_PIN,OUTPUT);
pinMode(YELLOW_LED_PIN,OUTPUT);
pinMode(RED_LED_PIN,OUTPUT);
pinMode(BLUE_LED_PIN,OUTPUT);

Serial.begin(9600);
}

void loop() {

if(digitalRead(SOME_BUTTON_PRESSED_PIN) == HIGH) {
Serial.println(“some button pressed.”);
}

if(digitalRead(A_BUTTON_PIN) == HIGH){
Serial.println(“button A pressed.”);
digitalWrite(GREEN_LED_PIN, HIGH);
}

if(digitalRead(B_BUTTON_PIN) == HIGH){
Serial.println(“button B pressed.”);
digitalWrite(YELLOW_LED_PIN, HIGH);
}

if(digitalRead(C_BUTTON_PIN) == HIGH){
Serial.println(“button C pressed.”);
digitalWrite(RED_LED_PIN, HIGH);
}

if(digitalRead(D_BUTTON_PIN) == HIGH){
Serial.println(“button D pressed.”);
digitalWrite(BLUE_LED_PIN, HIGH);
}
//ให้ไฟติดค้างไว้
delay(DELAY);

//Clear ไฟทุกดวงให้ดับ
digitalWrite(GREEN_LED_PIN, LOW);
digitalWrite(YELLOW_LED_PIN, LOW);
digitalWrite(RED_LED_PIN, LOW);
digitalWrite(BLUE_LED_PIN, LOW);

}

ภาพที่ 2 แสดง Sourcecode


ภาพที่ 3 แสดงการบันทึก

สั่ง Compile code โดยใช้คลิกที่ปุ่ม Verify ตามภาพที่ 4

ภาพที่ 4 แสดงการ Verify และ Compile Sourcecode

สั่ง Deploy code ไปที่ Board Arduino ตามภาพที่ 5

ภาพที่ 5 แสดงการ Upload Program ไปที่ Board Arduino

ทดลองกด Remote จากปุ่ม A, B, C, D ไฟจะติดเรียงลำดับ ดัง Video นี้ครับ

ภาพที่ 6 แสดง Video เสียงจาก Buzzer เมื่อกดปุ่ม

!!!สำเร็จแล้ว!!!

Share ผลงาน
เมื่อน้อง ๆ ทำสำเร็จแล้วอย่าลืมแชร์ให้เพื่อนๆ ดูได้ที่ Facebook MrMakerThailand
และหากน้องๆ ทำไม่ได้ ให้ติดต่อมาได้ตลอดเวลาที่ Inbox นะครับ