วันเสาร์ที่ 24 มิถุนายน พ.ศ. 2560

ESP32 กับการทำงานแบบ MultiCore! เมื่อหลายหัวดีกว่าหัวเดียว

ESP32 เป็น ชิพ ที่ พัฒนา ยิ่งขึ้นไปกว่า ชิพ ESP8266 
คือ เพิ่มทั้งคุณสมบัติ WiFi และ Bluetooth เข้าไปในตัว
นอกจากนี้คือ การที่มี Core อยู่ 2 Core

#ว่าง่ายๆ คือ เหมือนมี 2 หัวคิด ต่างประมวลผลแยกกัน ในคนๆเดียว

ไหนๆ มีถึง 2 Core กันแล้ว
เรามาแบ่ง งานให้เจ้า ESP32 ที่มี 2 หัวช่วยกันทำงานดีกว่า

ตัวอย่าง code
----------------
โคดนี้ ผู้เขียนเขียนจำลองให้เสมือน
มี setup() และ loop() อยู่ 2 ชุด
ให้แต่ละ Core ไว้กันทำงานแยกกันคิด

อย่างจะให้ Core ไหน คิดประมวลผล
ก็จับวางสิ่งที่ต้องการให้ทำ ไว้ใน setup() loop() ของ Core นั้นๆได้เลย

หมายเหตุ
-----------
ปกติแล้ว Core#0  นั้น ตามปกติจะถูกทำงานด้าน Processing ตลอดจนถึง WDT
ส่วนอีกคอร์  Core#1 จะถูกใช้ทำงานด้าน Application, Code ที่สั่งให้ทำงาน
ตัวอย่างนี้เป็น โคตที่ ปลุก Core#0 ขึ้นมาทำงานด้าน Application ไปพร้อมๆกับ Core#1 ด้วยกัน




















วันอังคารที่ 20 มิถุนายน พ.ศ. 2560

เล่นกับเวลาใน Mongoose-OS (พังพอน โอเอส)

วิธีแสดงค่าเวลา นาฬิกาปัจจุบัน บน mongoose-os



Mongoose-OS เป็น os อีกตัวสำหรับ ESP8266, ESP32 ฯลฯ
ที่ใช้ภาษา javascript แบบย่อ โดยมีเอนจิ้น mJS
ใช้ในการเขียนได้

ข้อดีอย่างนึง ตัว Mongoos-os
เมื่อทำการ flash ลง ESP8266 แล้ว
หลัง boot ทาง os จะมีการ sync เวลามาให้อัตโนมัติ
โดยเราไม่ต้องไปจัดการเพิ่มอะไรอีกเลย
ทำให้ เราดึงเวลามาใช้ได้ตรงตาม Internet time ได้ง่ายๆเลย
และหากจะกำหนดเวลาตาม นาฬิกาที่่แน่นอน
เช่นการเปิดปิด ไฟ ก็เป็นไปได้อย่างรวดเร็ว

code นี้จะเป็นตัวอย่าง
การแสดงเวลา Clock บน ESP8266
ที่ได้รับการ sync จาก Internetอัตโนมัติแล้ว
ด้วยโคดที่สั้นมากๆ ดังนี้

[init.js]
--------------------------------------------------
load('api_timer.js');
Timer.set(1000, true, function() {
let timezone = 7;
print(Timer.fmt("%T", timezone*3600+Timer.now()) );
}, null);
--------------------------------------------------
อธิบาย
load('api_timer.js');
........ คือ การ load library api_timer.js เข้ามา
Timer.set( เวลาที่ delay, วนรอบซ้ำไหม, function ที่ให้ทำงาน)
....... คือ การ กำหนด loop การทำงานของ function ที่ต้องการให้มีการทำงานซ้ำๆไปเรื่อยๆได้
Timer.fmt( รูปแบบที่จะให้แสดงเวลา, time );
....... คือ function แปลงเวลา time ไปแสดงผลตามรูปแบบที่กำหนด
TImer.now()
........ คือ ค่าเวลา time ณ ปัจจุบัน ที่ได้รับการ sync แล้ว ในหน่วยวินาที เมื่อทำการ บวก ปรับเวลาตาม timezone ก็จะเป็นเวลา time ณ ปัจจุบันของประเทศนั้นๆ

เป็นเรื่องกระทัดรัดดีงามของทาง Mongoose-OS
ที่ได้ทำการ sync เวลาที่ถูกต้องมาให้อัตโนมัติตั้งแต่แรกต่อ internet


















   
หากต้องการเปิด/ปิด ไม่ให้มีการ sync เวลาแต่เริ่มสตาร์ท ESP8266, ESP32 ฯลฯ




วันจันทร์ที่ 12 มิถุนายน พ.ศ. 2560

เปลี่ยน "ธีม" ให้ Arduino IDE เป็นแบบ Sublime Editor


Arduino IDE เป็น Editor พร้อมๆกับ เครื่องมือที่สำหรับพัฒนาโคด
สำหรับ อุปกรณ์บอร์ดไมโครคอนโทรลเลอร์ Arduino
แต่สามารถรองรับ บอร์ดอื่นๆ ได้ด้วยเป็นอย่างดี

ตามปกติแล้ว Arduino IDE จะมีพื้นเป็นสีขาว
แต่ตัว Arduino IDE ยังสามารถเปลี่ยน ธีม (Theme) ลูกเล่นสีสรร
ในการเขียน code ได้ ช่วยในการกวาดสายตาในการเขียน code ได้เป็นอย่างดี

โทนสี ธีม นี้จะเป็นการทำ ธีม แบบใกล้เคียงกับที่ใน Sublime Editor ใช้

สามารถเข้าไป download ธีมได้ที่
https://github.com/TridentTD/TridentArduinoTheme





วันพฤหัสบดีที่ 8 มิถุนายน พ.ศ. 2560

ล้าง ESP8266 ใหม่ๆ กันดีกว่า

เวลาเขียน ESP8266 ใช้งานไปในงานนึงๆ
อาจจะมีการ กำหนดตั้ง WiFi เป็นแบบ AccessPoint Mode
นั่นหมายถึง เรามีการนำมา ESP8266 มาปล่อย Hotspot ออกไป
เพื่อให้ อุปกรณ์ WiFi อื่นๆ เข้ามาเป็นลูกข่าย
ทำนองเดียวกับ น้องๆ Router

อย่างไรก็ตามพอเรา นำ ESP8266 กลับมาใช้ในงานอื่นๆ
ที่ไม่ต้องมีการใช้ WiFi แบบ Access Point Mode
แม้ไม่มีการสั่งเปิด Mode นี้ขึ้นมา
แต่ ชื่อ Access Point เดิมที่เคยตั้งไว้ ได้ถูกบันทึกใน ESP8266
ไว้ไม่ได้มีการลบทิ้งแต่อย่างใด

ทำให้ชื่อ Access Point ยังโชว์หรา
อุปกรณ์ WiFi อื่นๆ จะเห็นชื่อ ซึ่งไม่เป็นที่ต้องการ

เราสามารถทำการล้าง ESP8266 ใหม่หมดจด
ด้วย option  "erase_flash" ใน esptool.py โดยใช้เวลาเพียงเสี้ยววินาทีด้วยคำสั่งดังนี้

esptool.py  --port <COM PORT>   erase_flash


ตย.  อุปกรณ์ ESP8266 ต่อที่ COM4
esptool.py  --port COM4  erase_flash

เพียงเท่านี้ Access Point เดิมๆ ที่ไม่ได้เรียกใช้ ก็จะถูกลบทิ้งไป
ไม่ปรากฏเวลา อุปกรณ์ WiFi อื่น กำหนดค้นหา แม่ข่าย WiFi


หมายเหตุ
- ให้ลง ภาษา Python แล้ว เข้าไป download   "esptool.py" ได้ที่
https://github.com/espressif/esptool/blob/master/esptool.py