โปรเจกต์นี้จะสอนวิธีเซ็ตอัป OpenClaw บนฝั่งระบบปฏิบัติการ Linux ของบอร์ด Arduino UNO Q และนำไปเชื่อมต่อกับแอปแชทยอดฮิตอย่าง Telegram, WhatsApp, Discord หรือ Slack สิ่งที่คุณต้องทำก็แค่พิมพ์แชทสั่งบอร์ดว่า "turn the LED on" หรือ "what's the MCU status?" จากนั้นบอร์ดก็จะตอบสนองทันที โดยมีโมเดล AI สุดฉลาดอย่าง Anthropic Claude เป็นคนช่วยประมวลผลคำสั่งให้ครับ!
โปรเจกต์นี้ใช้โค้ด 2 ส่วนทำงานร่วมกัน คือ ฝั่งไมโครคอนโทรลเลอร์ (C++) เพื่อคุม LED และ ฝั่ง Linux (Python) เพื่อคุยกับ OpenClaw ครับ สามารถคลิกเพื่อดูโค้ดด้านล่างได้เลย:
1. โค้ดฝั่ง Arduino MCU (C++)
arduino_bridge.ino
/*
* This Arduino UNO Q code was developed by newbiely.com
* This Arduino UNO Q code is made available for public use without any restriction
* For comprehensive instructions and wiring diagrams, please visit:
* https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-openclaw
*/
#include "Arduino_RouterBridge.h"
// LED_BUILTIN is LED3 on the board, lights up RED, active LOW
// LOW = ON, HIGH = OFF
bool ledState = false;
String toggle_led(String arg) {
ledState = !ledState;
digitalWrite(LED_BUILTIN, ledState ? LOW : HIGH);
String msg = ledState ? "LED is now ON" : "LED is now OFF";
Monitor.println(msg);
return msg;
}
String get_status(String arg) {
String status = "MCU is running. LED: " + String(ledState ? "ON" : "OFF");
Monitor.println("Status requested: " + status);
return status;
}
void setup() {
Monitor.begin();
Bridge.begin();
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); // Start with LED off (active LOW)
Bridge.provide_safe("toggle_led", toggle_led);
Bridge.provide_safe("get_status", get_status);
Monitor.println("OpenClaw Bridge ready");
}
void loop() {
}
2. โค้ดฝั่ง Linux (Python)
linux_openclaw.py
"""
This Arduino UNO Q script was developed by newbiely.com
This Arduino UNO Q script is made available for public use without any restriction
For comprehensive instructions and wiring diagrams, please visit:
https://newbiely.com/tutorials/arduino-uno-q/arduino-uno-q-openclaw
"""
from arduino.app_utils import *
from arduino.app_bricks.web_ui import WebUI
def toggle_led():
result = Bridge.call("toggle_led", "")
print(f"OpenClaw -> toggle_led: {result}")
return {"result": result}
def get_status():
result = Bridge.call("get_status", "")
print(f"OpenClaw -> get_status: {result}")
return {"result": result}
web_ui = WebUI()
web_ui.expose_api("GET", "/api/toggle_led", toggle_led)
web_ui.expose_api("GET", "/api/get_status", get_status)
App.run()