Anto.io
Anto คือสื่อกลางในการสื่อสารและตัวช่วยเหลือที่ช่วยให้คุณสร้างสรรค์นวัตกรรมโดยเฉพาะทางด้าน IoT ได้ง่ายขึ้น โดยที่ไม่ต้องมีปัญหาจุกจิก หรือตั้งค่าอะไรให้วุ่นวาย
Anto เป็นสื่อกลางในการสื่อสาร Anto ตั้งเซิร์ฟเวอร์ให้คุณใช้บริการฟรี เป็นเสมือนตัวกลางในการสื่อสารระหว่างสิ่งต่างๆบนโลกอินเตอร์เน็ตเช่น คุณต้องการสั่งงานบอร์ดไมโครคอลโทรลเลอร์ผ่านอินเตอร์เน็ตโดยใช้โทรศัพท์มือถือของคุณ เป็นต้น ซึ่งปัจจุบันระบบเรารองรับการติดต่อสื่อสารผ่าน HTTP, HTTPS, MQTT, MQTTS, Websocket ทำให้: ทีมของคุณไม่ต้องเสียเวลาในการติดตั้งและตั้งค่าเซิร์ฟเวอร์ รวมถึงคอยมาดูแลรักษาระบบ
Anto สร้าง Library/API ที่ใช้งานง่าย Anto สร้าง Library ในการเขียนโปรแกรมและสร้าง API ให้นักพัฒนาสามารถเข้าถึงใช้งานและพัฒนาต่อยอดได้อย่างง่ายดาย ยกตัวอย่าง คุณสามารถส่งค่าไปยัง server โดยใช้เพียงแค่หนึ่งคำสั่งเช่น Anto.DigitalUpdate(“led”,true); ทั้งนี้เพื่อความง่ายในการเขียนโปรแกรม ซึ่งปัจจุบันเราได้ทำ Library รองรับ ESP8266 (Nodemcu), Arudino แล้ว และกำลังพัฒนาเพื่อให้รองรับ Rasserby Pi และอื่นๆ ทำให้: ทีมของคุณพัฒนาได้อย่างรวดเร็วมากขึ้น ใช้เวลากับส่วนอื่นได้มากขึ้นเช่น การทำฮาร์ดแวร์-กลไก การออกแบบผลิตภัณฑ์ เรื่องติดต่อธุรกิจอื่น เป็นต้นครับ
เตรียมตัวเริ่มต้นกับ Anto
HardWare ที่ต้องการ
- NodeMCU or Esp8266
SoftWare ที่ต้องการ
- Aruino IDE v1.9
ขั้นตอนเตรียมพร้อม
1.การติดตั้ง Virtual COM Port เพื่อใช้ในการติดต่อส่วนของ Hardware
- ถ้าหากใช้ NodeMCU version 0.9 ให้ดาวน์โหลด Driver และติดตั้ง ดาวน์โหลด
- ถ้าหากใช้ NodeMCU version 1.0 ให้ดาวน์โหลด Driver และติดตั้ง ดาวน์โหลด
2.การติดตั้ง Arduino IDE ที่รองรับ NodeMCU
- ดาว์โหลด และ ติดตั้ง Arduino IDE v1.6.9+
- ทำให้ Arduino IDE ของเรารู้จักกับบอร์ด NodeMCU เข้าเมนู File > Preferences จากนั้นใส่ข้อความว่าลงไปในช่อง Additional Board Manager URLs แล้วกดตกลง
- Install lib โดยเข้าเมนู Tools > Boards Manager พิมพ์ในช่องค้นหาว่าesp8266จากนั้นกดเลือก Install รอการติดตั้งสักครู่
3.ติดตั้ง Lib Anto และ สมัครสมาชิก Anto
- ดาวน์โหลด Lib Anto (Ver. 0.5.2) แล้วแตกไฟล์ที่ดาวน์โหลด เปลี่ยนชื่อโฟลเดอร์เป็น AntoIO
- วางโฟลเดอร์ AntoIO ไปไว้ที่ Documents > Arduino > Libraries
- สมัครสมาชิกเป็นครอบครัว Anto กรอกข้อมูลให้ครบถ้วนแล้วกดยืนยันการสมัคร
- Login เข้าสู่ระบบ
เริ่มต้นโปรเจค : ควบคุมหลอดไฟ LED ผ่าน Internet
ในบทนี้เราจะพูดถึงตัวอย่างในการคุม การเปิด/ปิด หลอดไฟ LED ได้ง่ายๆผ่านอินเทอร์เน็ต และแน่นอนว่ามันทำงานผ่านเว็บบราวเซอร์ ดังนั้นคุณจะสามารถควบคุมหลอดไฟของคุณผ่าน smart phone ก็ได้ เพียงเปิดเว็บบราวเซอร์บน smart phone
สิ่งที่ต้องเตรียมพร้อม
- จากเตรียมการเบื้องต้นสำหรับ Anto (คุณสามารถดูรายละเอียดได้ ที่นี่)
- สัญญาณ WiFi ในการเชื่อมต่อ nodeMCU กับ Internet
- Prototype Board
- LED 3 ตัว ตัวต้านทาน
- R 330(หรือ < 10k) 3ตัว
- สายจัมป์
Create Thing & Channels
สร้าง Thing และ Channel
Thing ก็คือ อุปกรณ์ที่เชื่อมต่อกับ Anto เช่น NodeMCU , ESP8266 เป็นต้น
Channel ก็คือ ช่องเก็บข้อมูลต่างๆ เช่น ข้อมูลของเซนเซอร์วัดอากาศ ข้อมูลการกดปุ่ม เป็นต้น
ตัวอย่างเช่น ในโปรเจคนี้
เราใช้ NodeMCU หนึ่งตัวในการควบคุม LED 3 หลอด
สรุปที่เราต้องสร้างก็คือ เรามี NodeMCU (1 Thing) ที่ต้องการเก็บค่าในการควบคุม LED (3 Channel)
ซึ่งสุดท้ายแล้วเวลาที่เราจะอ้างอิงถึงข้อมูล ไม่ว่าจะดึงค่าหรือเก็บค่า จะอ้างอิงถึง Thing และ Channel
ขั้นตอนการสร้าง
- Login เข้าสู่เว็บไซค์ กรอก Username และ Pasword ให้ถูกต้อง
- กดเข้าไปที่ Thing จากเมนูทางด้านซ้าย
- กด ในการสร้าง Thing
- กรอก NAME : NodeMCU , DESCREIPTION : Example control LED แล้วกด Add new
- เมื่อสร้างเสร็จแล้วจะได้ดังภาw กดไปที่เครื่องหมาย ของ Thing NodeMCU
- กด ในการสร้าง Channel
- กรอก NAME : LED1 , DESCREIPTION : controlLED ,TYPE : Switch on/off แล้วกด Add new
- สร้าง Channel LED2 และ LED3 เมื่อสร้างเสร็จแล้วจะได้ดังภาพ
- เข้ามาที่แถบเมนู Key ทางด้านซ้ายมือเพื่อเข้ามาสร้าง key ในการเชื่อมต่อฮาร์ดแวร์
- กด ในการสร้าง Key
- กรอก DESCREIPTION : NodeMCUkey , แล้วกดเลือก Permission ให้กับ Chanal ทั้ง 3 เป็น Read และ Update ดังรูป แล้วกด Add new
- เราก็จะได้ key ตามรูปภาพ เพื่อนำไปใช้ใน Hardware Programming ต่อไป
Hardware & program
ต่อ Hardware
- นำ Nodemcu ต่อเข้ากับ Prototype board
- ต่อ LED1 ขั้วบวก เข้ากับ D1 และ LED1 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
- ต่อ LED2 ขั้วบวก เข้ากับ D2 และ LED2 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
- ต่อ LED3 ขั้วบวก เข้ากับ D3 และ LED3 ขั้วลบต่อกับตัวต้านทาน และ ต่อตัวต้านทานลง GND
- นำสาย USB ต่อ NodeMCU เข้าคอม จะได้ดังรูป
เขียนโปรแกรม
เปิดเข้าโปรแกรม Arduino IDE เลือกบอร์ดที่ใช้เป็น NodeMCU
เข้าเมนู Tool > Board > NodeMCU 1.0 (หรือ NodeMCU 0.9 ตามที่ผู้ใช้เลือกใช้)
เลือก Port ในการลงโปรแกรม
เข้าเมนู Tool > Port > Port ของ NodeMCU (ถ้าไม่รู้ลองถอดสายแล้วดูว่าเมนูไหนหายไปแล้วเสียบใหม่)
เลือก Programmer ในการ Burn program
เข้าเมนู Tool > Programmer >Arduino ISPParallel Programmer (ถ้า v1.0 ใช้ Parallel Programmer)
ตัวอย่าง โปรแกรม
สามารถดาว์นโหลดได้ ที่นี่
ดึง Library Anto มาใช้
#include
กำหนดการตั้งค่าต่างๆ
// username of anto.io account
const char *user = "user";
// key of permission, generated on control panel anto.io
const char* key = "key";
// your default thing.
const char* thing = "NodeMCU";
// create AntoIO object named anto.
// using constructor AntoIO(user, key, thing)
// or use AntoIO(user, key, thing, clientId)
// to generate client_id yourself.
AntoIO anto(user, key, thing);
bool bIsConnected = false;
User ใช้ username ที่กดดูได้จาก ลิงค์
key ใช้ key ที่เราได้สร้างมาจากหัวข้อ Prepare
thing ใช้ NodeMCU ที่เราได้สร้างมาจากหัวข้อ Create Thing
สร้าง object anto ขึ้นมาเพื่อนำไปใช้งาน
กำหนดตัวแปรที่ใช้ในการรับค่าจาก channel
int Led1,Led2,Led3 = 0;
ตั้งค่าพื้นฐานในการเชื่อมต่อ Wifi,Anto และ กำหนดขา Output ให้กับ Hardware
void setup() {
// SSID and Password of your WiFi access point.
const char* ssid = "ssid";
const char* pwd = "pass";
Serial.begin(115200);
delay(10);
Serial.println();
Serial.println();
Serial.print("Anto library version: ");
Serial.println(anto.getVersion());
// Connect to your WiFi access point
if (!anto.begin(ssid, pwd)) {
Serial.println("Connection failed!!");
// Stop everything.
while (1);
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("Connecting to MQTT broker");
// register callback functions
anto.mqtt.onConnected(connectedCB);
anto.mqtt.onDisconnected(disconnectedCB);
anto.mqtt.onData(dataCB);
anto.mqtt.onPublished(publishedCB);
// Connect to Anto.io MQTT broker
anto.mqtt.connect();
//port output
//pinMode(D0,OUTPUT);
pinMode(D1,OUTPUT);
pinMode(D2,OUTPUT);
pinMode(D3,OUTPUT);
}
Serial.println("WiFi connected & Connecting to MQTT broker");
}
ตั้งค่า ssid และ password ในการเชื่อมต่อ wifi
กำหนดค่า Serial ที่ใช้ในการติดต่อสื่อสารเป็น 115200
แสดงเลขเวอร์ชัน Lib ของ Anto สามารถนำไปเชคว่าเป็นเวอร์ชันล่าสุดหรือไม่
เชื่อมต่อ wifi และ anto ด้วย anto.begin แล้วสั่ง Serial print เมื่อเชื่อมต่อสำเร็จ
กำหนดค่า call back functions (คำอธิบายแต่ละ function ดูด้านล่าง)
ตั้งค่า Pin ที่ต่อกับหลอดไฟ D1,D2,D3 ให้เป็น OUTPUT
ในส่วนของ void loop() จะไม่ได้เขียนโปรแกรมอะไรเพราะเราจะใช้ในส่วนของ call back fuction อย่างเดียว
void loop() {
// put your main code here, to run repeatedly:
}
สร้าง function connectedCB() ขึ้นมา
/*
* connectedCB(): a callback function called when the connection to the MQTT broker is establised.
*/
void connectedCB()
{
// If the connection is establised, subscribe channels.
bIsConnected = true;
Serial.println("Connected to MQTT Broker");
anto.sub("LED1");
anto.sub("LED2");
anto.sub("LED3");
}
เพื่อกำหนดว่า เมื่อ connect กับ MQTT broker แล้วจะให้ทำอะไรต่อ ในที่นี้
เปลี่ยนค่าตัวแปร bIsConnected เป็น true เพื่อบอกว่าต่อกับ MQTT broker ได้แล้ว และ Serial print ออกมา
Anto.sub("LED1") เพื่อ Subscribe channel ที่เราต้องการดึงค่ามาดูเมื่อมีการเปลี่ยนแปลงในที่นี้เรา Subscribe ไว้ 3 channel คือ LED1 , LED2 , LED3
สร้าง function disconnectedCB() ขึ้นมา
/*
* disconnectedCB(): a callback function called when the connection to the MQTT broker is broken.
*/
void disconnectedCB()
{
bIsConnected = false;
Serial.println("Disconnected to MQTT Broker");
}
เพื่อกำหนดว่า เมื่อ disconnect กับ MQTT broker แล้วจะให้ทำอะไรต่อ ในที่นี้ ให้ Serial print ออกมาบอก
สร้าง function msgArrvCB(String& topic, String& msg) ขึ้นมา
/*
* msgArrvCB(): a callback function called when there a message from the subscribed channel.
*/
void dataCB(String& topic, String& msg)
{
uint8_t index = topic.indexOf('/');
index = topic.indexOf('/', index + 1);
index = topic.indexOf('/', index + 1);
topic.remove(0, index + 1);
Serial.print(topic);
Serial.print(": ");
Serial.println(msg);
if(topic.equals("LED1")){
value = msg.toInt();
if(value == 1){
digitalWrite(D1,HIGH);
}
else{
digitalWrite(D1,LOW);
}
}
else if(topic.equals("LED2")){
value = msg.toInt();
if(value == 1){
digitalWrite(D2,HIGH);
}
else{
digitalWrite(D2,LOW);
}
}
else if(topic.equals("LED3")){
value = msg.toInt();
if(value == 1){
digitalWrite(D3,HIGH);
}
else{
digitalWrite(D3,LOW);
}
}
}
[สำคัญ]
เพื่อรับข้อความจาก channel ที่เราไป Subscribe ไว้ โดยจะเก็บไว้ในตัวแปร topic และ msg
เบื้องต้นเราตัด string topic ให้เหลือเฉพาะ ชื่อของ channel ที่ส่งมา
ทำการเช็ค if ว่าชื่อ channel ที่ส่งมาตรงกับ channel ที่เราต้องการใหม ในที่นี้เราดู channel LED1, LED2, LED3
เมื่อมีข้อความจาก channel ให้เราทำอะไรต่อ ในที่นี้เราต้องการคุมหลอดไฟ ตามค่าที่เราได้มาจาก chanal นั้นๆ
ใช้ตัวแปร Led1, led2, led3 รับค่าจากข้อความ msg ที่แปลงเป็น int ด้วย msg.toInt()
สั่งเปิดปิดหลอดไฟ ตามค่า Led1 , led2 , led3 ด้วย digitalWrite()
สร้าง function publishedCB() ขึ้นมา
/*
* publishedCB(): a callback function called when the message is published.
*/
void publishedCB(void)
{
Serial.println("published");
}
เพื่อกำหนดว่า เมื่อ published ค่าขึ้นไปบน MQTT broker แล้วจะให้ทำอะไรต่อ ในที่นี้ ให้ Serial print ออกมาบอก จบเพียงเท่านี้ Part หน้าจะมีอะไรเพิ่มเติมโปรดติดตาม