Mapo (Mapolang) คือภาษาระดับสูงสำหรับเขียนเฟิร์มแวร์ลงบอร์ด ESP32 / ESP8266 / STM32 เขียนโค้ดเป็นภาษาไทยได้ 100% แล้วกดปุ่ม “สร้าง + แฟลช” จากในเบราว์เซอร์ได้เลย — ไม่ต้องติดตั้ง Arduino IDE, ไม่ต้องตั้งค่า toolchain, ไม่ต้องหาสายไฟล์ไหนเพิ่ม
1 เขียนโค้ดเป็น “ภาษาไทย” ได้จริง ไม่ใช่แค่คอมเมนต์
คีย์เวิร์ดทุกตัวมีคำไทยเทียบเท่า และตั้งชื่อตัวแปร/ขา/งาน เป็นภาษาไทยได้ทั้งหมด — เด็ก ครู หรือช่างที่ไม่ได้ถนัดอังกฤษก็อ่านโค้ดออกทันที
อ่านแล้วรู้เรื่องเลยว่า “เปิดไฟ → รอครึ่งวินาที → ปิดไฟ → รอครึ่งวินาที” โดยไม่ต้องแปลเป็นอังกฤษในหัว
เทียบคำไทย ↔ คำอังกฤษ (ใช้คำไหนก็ได้)
| คำในภาษา Mapo | เทียบเท่าภาษาอังกฤษ | ความหมาย |
|---|---|---|
ออก | out / OUTPUT | ตั้งขาเป็นขาส่งออก |
เข้า | in / INPUT | ตั้งขาเป็นขารับเข้า |
ดึงขึ้น | pullup | เปิดตัวต้านทานดึงขึ้นในบอร์ด |
งาน | task | งานหนึ่งชุด (หลายงานทำงานคู่ขนานกันได้) |
ทำซ้ำ | loop | วนซ้ำตลอดเวลา |
ถ้า … จบถ้า | if … endif | เงื่อนไข |
รอ 500 มิลลิวินาที | delay(500) แบบไม่ค้าง | หน่วงเวลาโดยงานอื่นยังทำงานได้ |
เปิด / ปิด | HIGH / LOW | จ่ายไฟ / ตัดไฟ |
อ่าน 14 | analogRead(14) | อ่านค่าอนาล็อก |
ดีเอชที11(4) | DHT dht(4, DHT11) | สร้างเซนเซอร์อุณหภูมิ/ความชื้น |
ไพแอาร์(27) | PIR pir(27) | เซนเซอร์จับความเคลื่อนไหว |
ไวไฟ(…) | WiFi.begin(…) | เชื่อมต่อ WiFi |
เว็บ(80) | WebServer server(80) | เปิดเว็บเซิร์ฟเวอร์บนบอร์ด |
เอ็มคิวทีที(…) | PubSubClient | ต่อ MQTT broker |
ส่ง / รับ | publish / subscribe | ส่ง–รับข้อความ (topic) |
out คู่กับชื่อขาภาษาไทย2 ไม่ต้องติดตั้งอะไรเลย — เขียนและแฟลชจากเว็บ
ปัญหาใหญ่ของการสอนไมโครคอนโทรลเลอร์คือ “ลงโปรแกรมไม่ผ่าน” ซึ่งกินเวลาครึ่งคาบเรียน — Mapo ตัดขั้นตอนนั้นออกทั้งหมด
| ขั้นตอน | Mapo (เว็บ IDE) | Arduino ทั่วไป |
|---|---|---|
| ติดตั้งโปรแกรม | ไม่ต้องติดตั้ง — เปิดเบราว์เซอร์ | ติดตั้ง Arduino IDE + ไดรเวอร์ USB (CP2102/CH340) |
| ตั้งค่าเครื่องมือ | ระบบตั้งให้ตามบอร์ดที่เลือก | เลือกบอร์ด + พอร์ต + ตั้งค่าให้ถูก |
| ไลบรารี | เติมให้อัตโนมัติ (ค้นหา + ติดตั้งระหว่างคอมไพล์) | Library Manager → ค้น → ติดตั้ง → #include เอง |
| ต่อบอร์ด | เสียบ USB แล้วกด “เชื่อมต่อบอร์ด” | เสียบ USB + เลือก COM port ให้ถูก |
| อัปโหลด | กดปุ่มเดียว: แปลภาษา → คอมไพล์ → แฟลช | กด Upload (เจอ error ก็ต้องอ่านเอง) |
| ใช้กับเครื่องอื่น | เปิดจากเครื่องไหนก็ได้ที่ล็อกอิน (งานอยู่ในบัญชี) | ต้องติดตั้งและตั้งค่าใหม่ทุกเครื่อง |
3 คุมฮาร์ดแวร์ได้จริง ครอบคลุมอุปกรณ์ที่ใช้บ่อย
ไม่ต้องหาไลบรารีทีละตัว — อุปกรณ์ยอดนิยมมีคำสั่งพร้อมใช้ และตั้งชื่อตัวแปรเป็นไทยได้
| หมวด | รองรับ | ตัวอย่างคำสั่ง Mapo |
|---|---|---|
| จอแสดงผล | LCD I2C · OLED (SSD1306 / SH1106) · 7-Segment · NeoPixel · RGB LED | จอ1 = โอแอลอีดี()ให้ จอ1.แสดง "สวัสดี" |
| เซนเซอร์ | DHT11 · DS18B20 · LM35 · LDR · ความชื้นดิน · HC-SR04 (วัดระยะ) · MPU6050 (ไจโร/เอียง) · BMP280 (ความดัน/ความสูง) · Joystick · IR Receiver · PIR (HC-SR501) · Buzzer | ดี1 = ดีเอชที11(4)ระยะ = อ่านระยะ(5, 18) |
| มอเตอร์ / ไฟ | Servo · Stepper · PWM | ให้ เซอร์โว1.หมุน 90 |
| ระบบในตัว | PID Controller (คุมอุณหภูมิ/มอเตอร์) · บันทึก/อ่านค่าถาวร · ตัวจับเวลา | ให้ พีไอดี1.ตั้งค่า(2.0, 0.5, 1.0) |
ตัวอย่างจริง: อ่านอุณหภูมิ + จับคนเดินผ่าน
4 เน็ตเวิร์กและคลาวด์ “ในตัว” ไม่ต้องหาไลบรารีเพิ่ม
งานไอโอทีส่วนใหญ่ต้องต่อ WiFi แล้วคุยกับเซิร์ฟเวอร์ — ทั้งชุดนี้มีคำสั่งมาตรฐานให้แล้ว
| ความสามารถ | คำสั่งในภาษา Mapo | ใช้ทำอะไร |
|---|---|---|
| WiFi | ไวไฟ("ชื่อ", "รหัส") | เชื่อมต่อ WiFi |
| Access Point | จุดเชื่อมต่อ("Mapo-AP", "1234") | ตั้งบอร์ดเป็น hotspot ให้มือถือต่อ |
| เวลาจริง (NTP) | ให้ เวลา1.ซิงค์() | ได้เวลาจริงสำหรับตั้งเวลา/บันทึก log |
| MQTT | คิว = เอ็มคิวทีที("broker", 1883)ให้ คิว.ส่ง "บ้าน/อุณหภูมิ" ค่า | ส่งค่าเซนเซอร์ขึ้นคลาวด์ / รับคำสั่งกลับ |
| Web Server | เว็บ1 = เว็บ(80)ให้ เว็บ1.เส้นทาง "/" "สวัสดี" | ทำหน้าเว็บคุมอุปกรณ์จากมือถือ |
| HTTP Client | ให้ เอชทีทีพี1.รับ("http://…") | ดึงข้อมูลจาก API ภายนอก |
| TCP / UDP | ทีซีพี1 = ทีซีพี(8080) | คุยกับอุปกรณ์/โปรแกรมอื่นแบบ socket |
| WebSocket | ให้ ดับบลิวเอส1.เริ่ม() | ส่งข้อมูลสองทางแบบเวลาจริง |
| JSON | ให้ เจ1.เพิ่ม "อุณหภูมิ" 26.5 | สร้าง/อ่าน JSON คุยกับระบบอื่นได้ |
| กล้อง | ESP32-CAM | สตรีมภาพ / ถ่ายรูป |
ตัวอย่างจริง: เปิดเว็บเซิร์ฟเวอร์บนบอร์ด
5 งานหลายอย่างพร้อมกัน โดยไม่บล็อกกัน
สั่ง รอ ในงานไหน งานนั้นจะหยุดรอโดยไม่แช่ทั้งบอร์ด — ระบบแปลงเป็น state machine แบบ millis() ให้อัตโนมัติ
| เรื่อง | เขียนเองแบบ Arduino | ภาษา Mapo |
|---|---|---|
| หน่วงเวลา 2 วินาที | delay(2000) → บอร์ดค้างทั้งใบ เว็บไม่ตอบ เซนเซอร์ไม่อ่าน | รอ 2 วินาที → พักเฉพาะงานนั้น งานอื่นทำงานต่อ |
| ทำ 3 อย่างพร้อมกัน | ต้องเขียน millis() เอง 3 ชุด + ตัวแปรเวลา + if ซ้อนกัน | เขียนเป็น 3 งาน แยกกัน แต่ละงานมี ทำซ้ำ + รอ ของตัวเอง |
| แก้ไขภายหลัง | แก้ logic เวลาทีเดียวพังทั้งระบบ | แก้งานใดงานหนึ่งได้ โดยไม่กระทบงานอื่น |
| อ่านง่ายแค่ไหน | ตัวแปร lastRead, prevMillis ปนกันไปหมด | อ่านเป็นประโยค: “อ่านค่าทุก 2 วินาที” |
ทั้งสามงานทำงานพร้อมกัน — อ่านเซนเซอร์ทุก 2 วินาที ส่งคลาวด์ทุก 10 วินาที และเว็บตอบสนองตลอดเวลา โดยไม่ต้องเขียน millis() เองแม้แต่บรรทัดเดียว
6 รองรับสไตล์หุ่นยนต์ (แบบ ROS2): topic / pub / recv
แยก “อวัยวะ” (อ่านเซนเซอร์) กับ “สมอง” (ตัดสินใจ) แล้วคุยกันผ่าน topic — เหมาะกับหุ่นยนต์และระบบที่มีหลายส่วน
7 มี AI ผู้ช่วยที่ “รู้จักภาษา Mapo” ในตัว
ในหน้า IDE มีผู้ช่วย AI ที่ถูกป้อนคู่มือภาษา Mapo ไว้แล้ว จึงตอบตรงไวยากรณ์ ไม่เดาแบบ AI ทั่วไป
| ถามเป็นภาษาไทยได้เลย | ได้อะไรกลับมา |
|---|---|
| “ช่วยเขียนโค้ดอ่าน PIR แล้วส่งขึ้น MQTT” | โค้ด Mapo ที่คอมไพล์ผ่านทันที (รู้ทั้งชื่อไทยและอังกฤษ) |
| “error นี้คืออะไร แก้ยังไง” | อธิบายสาเหตุเป็นภาษาไทย + โค้ดที่แก้แล้ว |
| “ทำไมบอร์ดไม่เชื่อม WiFi” | ไล่ตรวจทีละจุด (ชื่อ WiFi / รหัส / ระยะสัญญาณ) |
| “เพิ่มปุ่มกดให้หยุดมอเตอร์” | แก้โค้ดเดิมให้ พร้อมอธิบายว่าอะไรเปลี่ยน |
⌨ เขียนโค้ดให้
รู้ไวยากรณ์ Mapo จริง ทั้งคีย์เวิร์ดไทย–อังกฤษ และเทมเพลตอุปกรณ์ทุกตัว
🐞 ช่วยแก้ error
อ่านข้อความ error จากตัวคอมไพล์ แล้วชี้บรรทัดที่ผิดพร้อมวิธีแก้
🇹🇭 ตอบภาษาไทย
อธิบายแนวคิดและศัพท์เทคนิคเป็นไทย เข้าใจได้โดยไม่ต้องแปล
🔎 ตรวจก่อนแฟลช
เช็กไวยากรณ์/พินชนกันให้ก่อน ลดการแฟลชพลาดซ้ำ ๆ
8 เอาไปใช้งานจริงได้ ไม่ใช่แค่ของเล่นในห้องเรียน
สิ่งที่ต้องมีเวลาติดตั้งให้ลูกค้าและดูแลระยะยาว — มีมาให้ตั้งแต่ต้น
| ความต้องการหน้างาน | ในภาษา Mapo |
|---|---|
| แก้โค้ดแล้วดันขึ้นบอร์ดที่ติดตั้งอยู่ ไม่ต้องไปถึงที่ | อัปเดตเฟิร์มแวร์ทางไกล (OTA) ในตัว — เลือกบอร์ดในเน็ตแล้วกดอัปเดต |
| คุยกับระบบของลูกค้า | MQTT + Web Server + JSON ครบ |
| จำค่าที่ตั้งไว้ แม้ไฟดับ | บันทึก/อ่านค่าถาวรในตัว |
| คุมอุณหภูมิ/ความเร็วให้คงที่ | PID Controller ในตัว |
| สอนพนักงาน/ส่งงานต่อ | โค้ดอ่านเป็นภาษาไทย คนอื่นรับช่วงต่อได้ทันที |
| เอกสารสำหรับติดตั้งจริง | คู่มือแยกจากบทเรียนเด็ก: สเปก · พินเอาต์ · ขั้นตอนติดตั้ง · การดูแล |
9 ตารางเทียบกับ Arduino C++ และ MicroPython
งานเดียวกัน เขียนต่างกันแค่ไหน — ดูจากโค้ดจริง
| งานสิ่งที่ต้องการ | ภาษา Mapoเขียนไทยได้ 100% | Arduino C++มาตรฐานเดิม | MicroPythonไพธอนบนบอร์ด |
|---|---|---|---|
| ไฟกระพริบ |
ไฟ1 2 ออก
งาน หลัก
ทำซ้ำ
เปิด ไฟ1
รอ 500 มิลลิวินาที
ปิด ไฟ1
รอ 500 มิลลิวินาที
จบทำซ้ำ
จบงาน
|
#define LED 2
void setup() {
pinMode(LED, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(500);
}
|
from machine import Pin
from time import sleep
led = Pin(2, Pin.OUT)
while True:
led.value(1)
sleep(0.5)
led.value(0)
sleep(0.5)
|
| อ่านอุณหภูมิ DHT11 |
ดี1 = ดีเอชที11(4) อุณหภูมิ = ดี1.อุณหภูมิ |
#include <DHT.h>
DHT dht(4, DHT11);
void setup(){ dht.begin(); }
float t = dht.readTemperature();
|
import dht from machine import Pin d = dht.DHT11(Pin(4)) d.measure() t = d.temperature() |
| หน่วงเวลาโดยไม่ค้างบอร์ด |
งาน อ่านค่า
ทำซ้ำ
ค่า = อ่าน 34
รอ 2 วินาที
จบทำซ้ำ
จบงาน
|
unsigned long prev = 0;
void loop() {
if (millis() - prev >= 2000) {
prev = millis();
int v = analogRead(34);
}
}
|
import asyncio
async def read():
while True:
v = adc.read()
await asyncio.sleep(2)
asyncio.run(read())
|
| ส่งค่าขึ้น MQTT |
คิว = เอ็มคิวทีที("broker", 1883)
ให้ คิว.ส่ง "บ้าน/อุณหภูมิ" 26.5
|
#include <PubSubClient.h>
#include <WiFi.h>
WiFiClient esp;
PubSubClient mqtt(esp);
mqtt.setServer("broker", 1883);
mqtt.publish("บ้าน/อุณหภูมิ", "26.5");
|
# ติดตั้ง umqtt.simple ก่อน
from umqtt.simple import MQTTClient
c = MQTTClient("id", "broker")
c.connect()
c.publish(b"บ้าน/อุณหภูมิ", b"26.5")
|
ตารางเทียบคุณสมบัติ
| ความสามารถ | Mapo | Arduino C++ | MicroPython | Blockly / ลากบล็อก |
|---|---|---|---|---|
| เขียนภาษาไทยได้ทั้งโค้ด | ✓ | ✗ | ✗ | △ บล็อกไทย แต่ไม่เห็นโค้ดจริง |
| ไม่ต้องติดตั้งเครื่องมือ (ใช้เว็บ) | ✓ | ✗ | △ ต้องแฟลชเฟิร์มแวร์ + ใช้ Thonny | ✓ |
| เติมไลบรารีให้อัตโนมัติ | ✓ | ✗ | ✗ | △ บางเจ้า |
| หน่วงเวลาแบบไม่ค้างบอร์ด | ✓ ให้เลย | ✗ ต้องเขียน millis() เอง | △ ต้องใช้ asyncio | △ ต้องเข้าใจเอง |
| หลายงานพร้อมกัน | ✓ เขียนเป็น “งาน” | ✗ ออกแบบเอง | △ asyncio / thread | ✗ |
| Web Server ในตัว | ✓ | △ WiFi + HTTP เขียนเอง | △ เขียนเอง | ✗ |
| MQTT ในตัว | ✓ | △ ติดตั้ง PubSubClient | △ ติดตั้ง umqtt | ✗ |
| อัปเดตทางไกล (OTA) | ✓ ในตัว | △ ทำได้แต่ซับซ้อน | ✗ | ✗ |
| AI ช่วยเขียนที่รู้จักภาษา | ✓ | ✗ | ✗ | ✗ |
| ใช้ทำงานเชิงพาณิชย์ | ✓ | ✓ | △ จำกัดด้านประสิทธิภาพ | △ จำกัด |
| ขนาดชุมชน / แหล่งช่วยเหลือ | △ ใหม่ กำลังโต | ✓✓ ใหญ่มาก | ✓ ใหญ่ | ✓ ใหญ่ |
10 เหมาะกับใคร
| กลุ่มผู้ใช้ | สิ่งที่ได้ | ตัวอย่างการใช้งาน |
|---|---|---|
| โรงเรียน / ศูนย์ STEM | เด็กได้ลองของจริงภายในคาบเรียน เพราะไม่เสียเวลาติดตั้งเครื่องมือ | ต่อเซนเซอร์ → ไฟติด → เขียนเงื่อนไขเอง |
| ครูผู้สอน | สื่อที่อ่านออกทั้งห้อง และอธิบาย error เป็นภาษาไทย | แจกบทเรียนเป็นชุด (STEM Kit) ให้ทำตามทีละขั้น |
| เมกเกอร์ / นักศึกษา | ทำโปรเจกต์เสร็จไว ได้ทั้ง WiFi, เว็บ, MQTT โดยไม่ต้องประกอบไลบรารี | สถานีวัดอากาศส่งขึ้นคลาวด์ในบ่ายเดียว |
| ช่างเทคนิค / วิศวกร | ติดตั้งและดูแลระยะยาวได้ด้วย OTA + เอกสารสเปก | ติดตั้งชุดควบคุมในโรงงานหลายสิบจุด อัปเดตจากออฟฟิศ |
| ทีมงาน / สตาร์ทอัพ | โค้ดอ่านง่าย คนใหม่รับช่วงต่อได้เร็ว | ทำต้นแบบไอโอทีให้ลูกค้าดู โดยไม่ต้องรอทีม embedded |
ความจริงที่ควรรู้ (ข้อจำกัด)
| เรื่อง | รายละเอียด |
|---|---|
| ต้องมีอินเทอร์เน็ตตอนคอมไพล์ | การคอมไพล์เกิดบนเซิร์ฟเวอร์ (หลังเขียนเสร็จแล้ว แฟลชซ้ำไม่ต้องรอ) — ข้อดีคือไม่ต้องติดตั้ง toolchain บนเครื่อง |
| ภาษาใหม่ ชุมชนยังเล็ก | ยังไม่มีกระทู้/ตัวอย่างเยอะเท่า Arduino ที่มีมานานหลายสิบปี (เรามีบทเรียน + AI ช่วยตอบในตัว) |
| ความเร็วเทียบเท่า Arduino ทั่วไป | โค้ดถูกแปลงเป็น C++ ให้อยู่แล้ว แต่ยังไม่เทียบเท่าโค้ด C++ ที่จูนมือระดับศาสตราจารย์ ด้านความเร็วและขนาดเฟิร์มแวร์ |
| กลุ่มอุปกรณ์เป็นชุดที่คัดไว้ | ไม่ใช่ Arduino Library ทั้งหมดที่มีในโลก — ตัวที่รองรับถูกทดสอบแล้วว่าใช้ได้จริง ถ้าต้องการตัวอื่นบอกได้ |
| การดีบั๊ก | ยังไม่มีตัวดีบั๊กแบบหยุดทีละบรรทัด (ใช้คอนโซล/แสดงค่า ออกมาช่วยดู) |
| บอร์ด ESP8266 | รองรับ แต่ต้องดูสเปกความจำ — งานที่ใช้ WiFi + MQTT + เว็บพร้อมกันควรใช้ ESP32 |
→ เริ่มต้นใช้งาน 5 ขั้น
- ทำความรู้จักภาษาเข้า mapolang.org — ดูภาพรวม ไวยากรณ์ และตัวอย่างจริง
- เรียนตามบทเรียน STEMที่ mapolang.org/lessons — แยกเป็น “เรียนรู้ STEM” กับ “ใช้งานจริง” และระดับ พื้นฐาน / กลาง / ชำนาญ
- เปิด IDE ต่อบอร์ดเข้า mapo-mcu.mapolang.org ด้วย Chrome/Edge → เสียบ USB → กด “เชื่อมต่อบอร์ด”
- เขียน 5 บรรทัดแรกก็อปโค้ดไฟกระพริบด้านบน → กดปุ่มเดียว → LED บนบอร์ดกระพริบ
- ต่อยอดเป็นงานจริงเพิ่ม WiFi → ส่งค่าเข้า MQTT → หรือทำเว็บคุมอุปกรณ์จากมือถือ แล้วใช้ OTA อัปเดตระยะไกล
สรุปสั้น ๆ
Mapo ทำให้ “คนไทย” เข้าถึงงานฝังโปรแกรม (embedded) ได้จริง เพราะเขียนไทยได้ 100% · ไม่ต้องติดตั้งอะไร · อุปกรณ์และไลบรารีครบ · ใช้งานได้ทั้งในห้องเรียนและหน้างานจริง — เรียนเพื่อเข้าใจ แล้วเอาไปใช้ทำของขายได้เลย