Zero to Hero ไม่มีพื้นฐานก็ใช้ NETPIE ได้ : Part 3

Siriyaporn Sakunwa
NEXPIE Co., Ltd.
Published in
4 min readJun 6, 2023

--

จาก Part 2 เราได้ทำการเชื่อมต่อ MQTT ใน Part นี้เราจะเริ่มการ Simulation ด้วย WOKWI ซึ่ง WOKWI เป็นการจำลองการต่อวงจร เพื่อให้ผู้ใช้งานใหม่ หรือผู้เริ่มต้นสามารถที่จะทำตามได้โดยที่ไม่จำเป็นที่จะต้องมีอุปกรณ์จริง หรือผู้ที่ต้องการทดลองโดยที่ไม่มีอุปกรณ์จริง ซึ่งสะดวก และง่ายต่อการเข้าใจ

WOKWI เป็น Platform ที่ใช้สำหรับการจำลองและการสร้าง Project อิเล็กทรอนิกส์ โดยเฉพาะอย่างยิ่งสำหรับการพัฒนาและทดสอบวงจร Arduino และ ESP32 โดยผู้ใช้สามารถออกแบบวงจรในเครื่องมือ WOKWI Schematic Editor และทดสอบการทำงานของวงจรโดยใช้ Browser เพียงอย่างเดียว นอกจากนี้ยังมีเครื่องมืออื่น ๆ เช่น WOKWI Arduino Simulator และ WOKWI Breadboard Simulator ที่ช่วยให้ผู้ใช้สามารถจำลองการทำงานของวงจรได้อย่างเหมือนจริง และทดสอบ Code อิเล็กทรอนิกส์กับบอร์ด Arduino ได้แบบออนไลน์

งั้นเราลองมาลองใช้ WOKWI ร่วมกับ NETPIE กันเลยค่ะ

เริ่มต้นด้วย WOKWI

1. ไปที่ https://wokwi.com/ เพื่อทำการสร้างการจำลองของบอร์ด และวงจร

2. เลื่อนลงหา “Start from Scratch” เลือกที่ “ESP32” (ถ้าหากเราเลือก MicroPython on ESP32 จะเป็นการใช้ Python ร่วมกับ ESP32)

3. เมื่อเราทำการเลือกแล้วจะปรากฏหน้าต่างดังรูป ให้เราทำการคลิกที่ “+” (สีฟ้า)

4. ให้เราคลิกเลือกที่ “LED

5. อุปกรณ์ที่เราได้ทำการเลือกจะปรากฏขึ้นมา ถ้าเราต้องการที่จะ Flip ให้เราคลิกเลือกดังที่วง หากเราต้องการที่จะเปลี่ยนสีก็สามารถเลือกได้ โดยเลือกจากเลข 0–9 หากเราต้องการลบอุปกรณ์ให้เราทำการคลิกที่ถังขยะอุปกรณ์ก็จะหายไป หรือกดคลิกที่อุปกรณ์ และกด Delete ที่คีย์บอร์ดของเรา

**ขาที่ยาวกว่าของ LED จะเป็นขั้ว + ขาที่สั้นกว่าจะเป็นขั้ว — ถ้าเราจะไม่ดูที่ความยาวของขา สามารถดูได้จากภายใน LED โดยดูที่ฝั่งเล็ก และฝั่งใหญ่ หากเป็นฝั่งใหญ่จะเป็นขั้วลบ หากเป็นฝั่งเล็กจะเป็นขั้วบวก **

6. จากนั้นให้เราเลือก “อุปกรณ์ตัวต้านทาน (Resistor)

7. ให้เราทำการต่อสายโดยต่อขาที่ขั้วบวกกับ Resistor และต่อไปที่ขา D23 ส่วนขาขั้วลบต่อไปที่ GND ของ ESP32 ดังรูป

8. จากนั้นทำการพิมพ์โค้ดลงไปที่ฝั่งซ้ายมือ โดยที่ส่วนในโค้ดที่เป็น

const char*mqtt_Client= “” ; ให้เราเติม Client id ใน “”

const char*mqtt_username= “” ; ให้เราเติม Token ใน “”

const char*mqtt_password= “” ; ให้เราเติม Secret ใน “”

*โดยที่เป็นของ device อีกตัวที่ไม่ใช่ตัวเดียวกับบน MQTT (เนื่องจากไม่สามารถที่จะใช้ device ตัวเดียวกันได้) และทำการเปลี่ยน*

if (String(topic)== “@msg/Led”) โดยใน “” ให้ตรงกับชื่อที่ตั้งบน MQTT (Topic to publish)

ส่วนที่เหลือไม่ต้องเปลี่ยน และเราต้องทำการเพิ่ม Library Manager ก่อนคลิกที่เราได้ทำวงไว้

9. โดยการคลิกที่ “+” (สีฟ้า)

10. พิมพ์ว่า “PubSubClient” และคลิกเลือก

11. จากนั้นให้เราทำการคลิกที่ “Start the Simulation” (ปุ่มสีเขียว) อาจจะใช้เวลาสักหน่อย

12. จากนั้นจะขึ้นดังรูปว่าเชื่อมต่อ Wifi สำเร็จ

การใช้งานของ WOKWI ก็จะมีการเชื่อมต่อการใช้ WiFi โดยที่เราไม่สามารถใช้ WiFi ของเราได้เนื่องจากว่าเราได้ใช้ เว็บ WOKWI ในการจำลองการใช้งานของบอร์ดและอุปกรณ์ต่างๆ เราต้องใช้ WiFi ของเว็บ ที่ชื่อว่า Wokwi-GUEST

ส่วนของ Code

#include <WiFi.h> \\ ประกาศเรียกใช้ ESP32
#include <PubSubClient.h> \\ ประกาศเรียกใช้ Client ของ MQTT

const char*ssid="Wokwi-GUEST"; \\ ประกาศสร้างตัวแปรเก็บ Wokwi-GUEST เครือข่าย WiFi ชื่อว่า ssid (ไม่สามารถเชื่อม wifi ของเราได้ เนื่องจากเราได้ทำการใช้การ Simulation บนเว็บ ไม่ได้ทำการต่อบอร์ดจริง)
const char*password=""; \\ ประกาศสร้างตัวแปรเก็บ Password ของเครื่อข่าย WiFi ชื่อว่า password

const char*mqttServer="mqtt.netpie.io"; \\ ประกาศใช้ mqttServer ที่ mqtt.netpie.io
const int mqtt_port=1883; \\ ประกาศใช้ Port 1883 ( บางอุปกรณ์มีให้กรอกเลข port )
const char*mqtt_Client="024cea6e-7d4f-4bc1-b095-e05ba3660354"; \\ ประกาศใช้ Client id ของ NETPIE
const char*mqtt_username="vCFeCWYJz1r9V6twTHjr9NkDyCPhojJE"; \\ ประกาศใช้ Token ของ NETPIE
const char*mqtt_password="w4iN(nU)GV4(kJ9*K_6oOcFx_qQnolWE"; \\ ประกาศใช้ Secret ของ NETPIE

WiFiClient espClient;
PubSubClient client(espClient);

int ledPin = 23; \\ ใช้ Led ขา 23

void setup() \\ ทำการเชื่อมต่อกับ Network
{
Serial.begin(9600); \\ เริ่มต้นใช้ความเร็ว 9600
delay(10); \\ ให้หน่วงเวลา10 ms
Serial.println();
Serial.println("Connecting to"); \\ ปริ้นข้อความ Connecting to
Serial.println(ssid); \\ ปริ้นชื่อ ssid ที่เราทำการประกาศไป
wifiConnect();
Serial.println("");
Serial.println("WiFi connected"); \\ ปริ้นข้อความ WiFi connected
client.setServer(mqttServer,mqtt_port); \\ เชื่อมต่อ MQTT Server
client.setCallback(callback); \\ สร้างฟังก์ชันเมื่อมีการติดต่อจาก mqtt มา
pinMode(ledPin,OUTPUT); \\ ให้ขา Led เป็น output
}

void wifiConnect() \\ ทำการเชื่อมต่อ Wifi
{
WiFi.mode(WIFI_STA); \\ ใช้งานฟังก์ชัน WiFi.mode เพื่อตั้งค่าโหมดของ Wi-Fi เป็นแบบ WIFI_STA
WiFi.begin(ssid,password); \\ Wifi เริ่มต้นที่ ssid กับ password
while(WiFi.status()!=WL_CONNECTED) \\ เริ่มใช้งานฟังก์ชัน while ลูป สำหรับตรวจสอบการการเชื่อมต่อ Wi-Fi โดยถ้า WiFi.Status มีค่าไม่เท่ากับ WL_CONNECTED
{
delay(500); \\ หน่วงเวลา 500 ms
Serial.print("."); \\ ให้ปริ้น . เมื่อกำลังเชื่อมต่อ
}
}

void mqttReconnect() \\ วน Loop จนกว่าจะเชื่อมต่อได้
{
while(!client.connected()) \\ พยายามเชื่อมต่อ
{
if(client.connect(mqtt_Client,mqtt_username,mqtt_password)) {
client.subscribe("@msg/#");
}
else
delay(5000); \\ ให้หน่วงเวลา 5000 ms
}
}

void callback(char*topic,byte*payload,unsigned int length)
{
String message;
for(int i=0;i<length;i++)
message = message+(char)payload[i]; \\ อ่านข้อความจาก topic ที่ส่งมา
if(String(topic)=="@msg/Led")
{
if(message=="ledon") \\ ถ้าพิมพ์ ledon ที่ MQTT
{
digitalWrite(ledPin, HIGH); \\ ไฟ Led ติด
}
else if(message=="ledoff") \\ ถ้าพิมพ์ ledoff ที่ MQTT
{
digitalWrite(ledPin, LOW); \\ ไฟ Led ดับ
}
}
}

หรือสามารถดูได้ที่ https://wokwi.com/projects/364242498475297793

วงจรนี้เราสามารถที่จะต่อจริงได้ สามารถต่อได้ตามรูปได้เลยทุกอย่างเหมือนกันหมดเพียงแต่ที่กล่าวมาเป็นการ Simulation โดยทำการโหลดได้ที่ Arduino เพื่อติดตั้งโปรแกรม Arduino IDE บนคอมพิวเตอร์ หรือจะทำตามขั้นตอนที่ https://netpie.gitbooks.io/nodemcu-esp8266-on-netpie/content/chapter1.html

ขอจบในส่วนของ Part นี้ไว้เพียงเท่านี้ เราจะมาต่อการสั่ง MQTT ใน Part 4

--

--