Approved Reseller of Raspberry Pi

ESP32 + MQTT: สร้างสวิตช์ควบคุมอุปกรณ์ไฟฟ้าผ่านเน็ตเวิร์ก

ESP32 RF Switch - สวิตช์ไร้สายควบคุมผ่าน MQTT

ESP32 RF Switch: สวิตช์ไร้สายควบคุมผ่าน MQTT และ Home Assistant

โปรเจคนี้เป็นการสร้างสวิตช์ไร้สาย RF 433MHz ด้วย ESP32 ที่สามารถรับและส่งสัญญาณเพื่อควบคุมอุปกรณ์ไฟฟ้าต่างๆ ผ่านโปรโตคอล MQTT และเชื่อมต่อกับ Home Assistant เพื่อสร้างระบบบ้านอัจฉริยะที่สมบูรณ์แบบ ในบทความนี้จะพาคุณไปทำความเข้าใจตั้งแต่การเลือกฮาร์ดแวร์ การถอดรหัสสัญญาณ RF การส่งสัญญาณ การตั้งค่า MQTT จนถึงการเชื่อมต่อกับ Home Assistant พร้อมโค้ดตัวอย่างและขั้นตอนละเอียด

Hardware

ฮาร์ดแวร์ที่ใช้ในโปรเจคนี้ประกอบด้วย:

อุปกรณ์หลัก:

  • ESP32 Development Board - ไมโครคอนโทรลเลอร์ที่มี WiFi และ Bluetooth ในตัว เหมาะสำหรับงาน IoT
  • โมดูล RF Receiver 433MHz (เช่น RXB6, SYN470R หรือ WL101-341) - สำหรับรับสัญญาณจากรีโมทหรือเซ็นเซอร์ไร้สาย
  • โมดูล RF Transmitter 433MHz (เช่น FS1000A, STX882 หรือ WL101-341) - สำหรับส่งสัญญาณไปควบคุมอุปกรณ์
  • สวิตช์กดหรือสวิตช์ Toggle - สำหรับเป็น Input ในการควบคุมแบบ Manual
  • โมดูลรีเลย์ 1-4 ช่อง - ถ้าต้องการควบคุมอุปกรณ์ไฟฟ้า AC/DC โดยตรง

อุปกรณ์เสริม:

  • แหล่งจ่ายไฟ 5V หรือ 3.3V ที่เหมาะสมกับ ESP32 และโมดูล RF
  • สาย Jumper และ Breadboard สำหรับต่อวงจร
  • ตัวต้านทาน Pull-up/Pull-down ตามความเหมาะสม
  • เสาอากาศ 17.3 ซม. สำหรับโมดูล RF เพื่อเพิ่มระยะการรับส่งสัญญาณ

ข้อแนะนำในการเลือกโมดูล RF:

ควรเลือกแบบที่มีความไวสูงและรองรับ ASK/OOK Modulation ซึ่งเป็นมาตรฐานของอุปกรณ์ RF 433MHz ทั่วไป

การต่อวงจร:

  • ต่อขา VCC ของโมดูล RF เข้ากับ 5V หรือ 3.3V (ตามสเปค)
  • ต่อ GND เข้ากับ GND
  • ต่อขา DATA ของ Receiver เข้ากับ GPIO ของ ESP32 เช่น GPIO 4
  • ต่อขา DATA ของ Transmitter เข้ากับ GPIO อื่น เช่น GPIO 5
ESP32 RF Switch Hardware
ภาพ: ฮาร์ดแวร์ ESP32 RF Switch พร้อมโมดูล RF Receiver และ Transmitter

Initial testing

ขั้นตอนแรกในการทดสอบคือการตรวจสอบว่าโมดูล RF Receiver สามารถรับสัญญาณจากรีโมทหรืออุปกรณ์ RF ได้หรือไม่

การติดตั้งไลบรารี:

  • ใช้ไลบรารี RCSwitch ซึ่งเป็นไลบรารีที่ได้รับความนิยมสำหรับการทำงานกับอุปกรณ์ RF 433MHz
  • ติดตั้งไลบรารีผ่าน Arduino IDE Library Manager โดยค้นหา "rc-switch" และติดตั้ง

การเขียนโค้ดทดสอบ:

  • ใช้ตัวอย่าง ReceiveDemo_Simple ที่มาพร้อมกับไลบรารี
  • โค้ดจะทำการอ่านค่าจากขา GPIO ที่ต่อกับ RF Receiver และแสดงผลผ่าน Serial Monitor เมื่อมีสัญญาณเข้ามา
  • กำหนดขา GPIO ที่ใช้ เช่น mySwitch.enableReceive(4) สำหรับ GPIO 4

การทดสอบ:

  • Upload โค้ดเข้า ESP32 และเปิด Serial Monitor ที่ Baud Rate 115200
  • ทดสอบโดยกดปุ่มบนรีโมท RF หรือเปิดเซ็นเซอร์ RF ที่มีอยู่
  • ถ้าทำงานถูกต้อง Serial Monitor จะแสดงข้อมูลเช่น "Received 5393 / 24bit Protocol: 1"

ข้อมูลที่ได้รับ:

  • Decimal Value - ค่าทศนิยมของสัญญาณ
  • Bit Length - จำนวนบิตของข้อมูล
  • Protocol - โปรโตคอลที่ใช้ (Protocol 1, 2, 3 ฯลฯ)

ให้บันทึกค่าเหล่านี้ไว้เพื่อใช้ในขั้นตอนการส่งสัญญาณ

การแก้ปัญหา:

หากไม่มีข้อมูลแสดงออกมา ให้ตรวจสอบการต่อวงจร แรงดันไฟ และลองเปลี่ยนขา GPIO หรือเพิ่มเสาอากาศ

Serial Monitor Output
ภาพ: Serial Monitor แสดงข้อมูลสัญญาณ RF ที่ได้รับจากรีโมท

Full decoding

หลังจากทดสอบเบื้องต้นแล้ว ขั้นตอนต่อไปคือการถอดรหัสสัญญาณ RF อย่างละเอียดเพื่อให้สามารถจำแนกปุ่มต่างๆ บนรีโมทหรือแหล่งสัญญาณต่างๆ ได้

การใช้โค้ดขั้นสูง:

  • ใช้ตัวอย่างโค้ด ReceiveDemo_Advanced ซึ่งจะแสดงข้อมูลเพิ่มเติม
  • Binary Value - ค่าไบนารีของสัญญาณ
  • Tri-State Value - สำหรับบางโปรโตคอล
  • Pulse Length - ความยาวของพัลส์สัญญาณ
  • Raw Data - ข้อมูลดิบของสัญญาณ

ประโยชน์ของข้อมูลเหล่านี้:

มีประโยชน์ในการ Debug และทำความเข้าใจโครงสร้างของสัญญาณ RF โดยเฉพาะเมื่อต้องการทำงานกับอุปกรณ์ที่ใช้โปรโตคอลพิเศษหรือไม่ได้มาตรฐาน

การบันทึกค่าของแต่ละปุ่ม:

  • ทดสอบกดปุ่มแต่ละปุ่มบนรีโมทและบันทึกค่า Decimal Value ของแต่ละปุ่มไว้
  • ตัวอย่าง: ปุ่ม A = 5393, ปุ่ม B = 5396, ปุ่ม C = 5412, ปุ่ม D = 5443

การนำไปใช้:

ค่าเหล่านี้จะถูกใช้ในการเขียนโค้ดเพื่อจำแนกว่าปุ่มไหนถูกกด และสั่งการให้ ESP32 ทำงานตามที่ต้องการ เช่น:

  • เปิด-ปิดไฟ
  • เปิด-ปิดพัดลม
  • ส่งคำสั่งผ่าน MQTT ไปยังอุปกรณ์อื่น

ทางเลือกในการเปรียบเทียบ:

นอกจากนี้ยังสามารถใช้ค่า Binary หรือ Tri-State ในการเปรียบเทียบได้เช่นกัน ขึ้นอยู่กับความเหมาะสมของโปรโตคอล

กรณีพิเศษ:

สำหรับอุปกรณ์บางชนิดที่ใช้ Rolling Code หรือ Encryption อาจต้องใช้วิธีการถอดรหัสที่ซับซ้อนกว่า หรือใช้ไลบรารีเฉพาะทาง

Transmitting experiments

หลังจากถอดรหัสสัญญาณได้แล้ว ขั้นตอนต่อไปคือการทดลองส่งสัญญาณ RF เพื่อควบคุมอุปกรณ์

การเตรียมฮาร์ดแวร์:

  • ใช้โมดูล RF Transmitter
  • ต่อขา DATA ของ Transmitter เข้ากับ GPIO ของ ESP32 เช่น GPIO 5
  • ต่อ VCC และ GND ตามปกติ

การเขียนโค้ดส่งสัญญาณ:

  • ใช้ตัวอย่างโค้ด SendDemo ที่มาพร้อมกับไลบรารี RCSwitch
  • กำหนดขา GPIO: mySwitch.enableTransmit(5)
  • กำหนดค่าที่ต้องการส่ง: mySwitch.send(5393, 24)
  • 5393 คือ Decimal Value ที่ได้จากการถอดรหัส
  • 24 คือจำนวนบิต

การตั้งค่าเพิ่มเติม:

  • กำหนด Protocol: mySwitch.setProtocol(1)
  • กำหนด Pulse Length: mySwitch.setPulseLength(350)
  • กำหนด Repeat Count: mySwitch.setRepeatTransmit(10) เพื่อส่งสัญญาณซ้ำหลายครั้ง

การทดสอบ:

  • Upload โค้ดและดูว่าอุปกรณ์ที่ต้องการควบคุม (ปลั๊กไฟ RF, หลอดไฟ RF, พัดลม RF) ทำงานตามคำสั่งหรือไม่
  • หากไม่ทำงาน ให้ลองปรับค่า Protocol, Pulse Length หรือ Repeat Count

การเพิ่มประสิทธิภาพ:

  • การส่งสัญญาณซ้ำหลายครั้งช่วยเพิ่มความน่าเชื่อถือในการรับสัญญาณ
  • การเพิ่มเสาอากาศที่ Transmitter ช่วยเพิ่มระยะการส่งสัญญาณได้
  • ควรทดสอบในระยะใกล้ก่อน แล้วค่อยๆ เพิ่มระยะห่างเพื่อหาขีดจำกัดของระบบ

การควบคุมหลายอุปกรณ์:

ให้บันทึกรหัสของแต่ละอุปกรณ์และสร้างฟังก์ชันสำหรับส่งสัญญาณแต่ละตัว เช่น:

  • void turnOnLight() { mySwitch.send(5393, 24); }
  • void turnOffLight() { mySwitch.send(5396, 24); }
RF Receiver Module
ภาพ: โมดูล RF Receiver สำหรับรับสัญญาณจากรีโมทและเซ็นเซอร์

Simultaneous transmit and receive

ในการใช้งานจริง เรามักต้องการให้ ESP32 สามารถรับและส่งสัญญาณ RF ได้พร้อมกัน

ตัวอย่างการใช้งาน:

  • รับสัญญาณจากรีโมทเพื่อควบคุมอุปกรณ์ในบ้าน
  • ส่งสัญญาณไปควบคุมอุปกรณ์อื่นผ่าน MQTT หรือ Home Assistant

การเตรียมฮาร์ดแวร์:

  • ใช้ทั้ง RF Receiver และ RF Transmitter ต่อกับ ESP32 พร้อมกัน
  • ต่อที่ GPIO คนละขา เช่น Receiver ที่ GPIO 4 และ Transmitter ที่ GPIO 5

การเขียนโค้ด:

  • เรียกใช้ทั้ง enableReceive() และ enableTransmit() พร้อมกัน
  • สร้าง Loop ที่ตรวจสอบสัญญาณที่เข้ามาอยู่ตลอดเวลา
  • เมื่อมีสัญญาณเข้ามา ให้ประมวลผลและตัดสินใจว่าจะทำอะไร

ตัวอย่างการทำงาน:

  • ถ้าได้รับรหัส 5393 ให้เปิดไฟ และส่งสถานะผ่าน MQTT ไปยัง Home Assistant
  • ถ้าได้รับคำสั่งจาก MQTT ให้ส่งสัญญาณ RF ไปควบคุมอุปกรณ์

ข้อควรระวัง:

การส่งและรับสัญญาณพร้อมกันอาจทำให้เกิด Interference หรือสัญญาณรบกวนได้ โดยเฉพาะถ้าใช้ความถี่เดียวกัน

วิธีแก้ปัญหา:

  • ใช้ Timing ที่เหมาะสม เช่น ไม่ส่งสัญญาณในขณะที่กำลังรับ
  • ใช้ Buffer เพื่อเก็บคำสั่งที่ต้องส่งและส่งทีละคำสั่ง
  • ใช้ Interrupt-based Receiving แทน Polling เพื่อลด CPU Usage และเพิ่มความเร็วในการตอบสนอง

ข้อดีของไลบรารี RCSwitch:

ไลบรารี RCSwitch รองรับ Interrupt โดยอัตโนมัติ ดังนั้นไม่ต้องกังวลเรื่องนี้มากนัก

ข้อควรระวังเพิ่มเติม:

ควรระวังเรื่อง Timing ในการส่งสัญญาณ โดยเฉพาะเมื่อมีการทำงานหลายอย่างพร้อมกัน เช่น:

  • การเชื่อมต่อ WiFi
  • การทำงานกับ MQTT
  • การอ่านเซ็นเซอร์

IotWebConf setup

IotWebConf เป็นไลบรารีที่ช่วยให้การตั้งค่า WiFi และพารามิเตอร์ต่างๆ ของ ESP32 ทำได้ง่ายขึ้นผ่าน Web Interface โดยไม่ต้อง Hard-code SSID และ Password ในโค้ด

ข้อดีของ IotWebConf:

  • เหมาะสำหรับการใช้งานจริงและการแจกจ่ายอุปกรณ์ให้ผู้อื่นใช้
  • ไม่ต้อง Hard-code ข้อมูล WiFi ในโค้ด
  • สามารถเพิ่ม Custom Parameter ได้ง่าย
  • มีระบบ OTA (Over-The-Air) Update ในตัว

การติดตั้ง:

  • ติดตั้งไลบรารี IotWebConf ผ่าน Arduino IDE Library Manager
  • ค้นหา "IotWebConf" และติดตั้ง

การเขียนโค้ด:

  • Include ไลบรารีและสร้าง Object
  • IotWebConf iotWebConf("ESP32-RF-Switch", &dnsServer, &server, "admin", "password")
  • "ESP32-RF-Switch" คือชื่อ Access Point ที่จะแสดงเมื่อ ESP32 อยู่ในโหมด Config
  • "admin" และ "password" คือ Username และ Password สำหรับเข้าหน้า Web Config

การตั้งค่าครั้งแรก:

  • เมื่อ ESP32 เริ่มทำงานครั้งแรกหรือไม่สามารถเชื่อมต่อ WiFi ได้ มันจะสร้าง Access Point
  • เชื่อมต่อด้วยมือถือหรือคอมพิวเตอร์
  • เปิดเบราว์เซอร์ไปที่ 192.168.4.1 เพื่อตั้งค่า

พารามิเตอร์ที่สามารถตั้งค่าได้:

  • SSID และ Password ของ WiFi
  • MQTT Server และ Port
  • MQTT Username และ Password
  • MQTT Topic
  • RF Code สำหรับแต่ละปุ่ม
  • Pulse Length และ Protocol

การเพิ่ม Custom Parameter:

สามารถเพิ่ม Custom Parameter ได้ง่ายโดยใช้ IotWebConfParameter และเพิ่มเข้าไปใน iotWebConf.addParameter()

ระบบ OTA Update:

  • มีระบบ OTA (Over-The-Air) Update ในตัว
  • สามารถ Upload Firmware ใหม่ผ่าน Web Interface ได้โดยไม่ต้องต่อสาย USB
  • สะดวกมากสำหรับอุปกรณ์ที่ติดตั้งในที่สูงหรือยากเข้าถึง

หลังจากตั้งค่าเสร็จ:

ESP32 จะ Reboot และเชื่อมต่อ WiFi ตามที่ตั้งค่าไว้

MQTT

MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลการสื่อสารแบบ Lightweight ที่ออกแบบมาสำหรับอุปกรณ์ IoT

รูปแบบการทำงาน:

  • ใช้รูปแบบ Publish/Subscribe Pattern
  • มี MQTT Broker เป็นตัวกลางในการรับและส่งข้อความระหว่างอุปกรณ์ต่างๆ

การติดตั้งไลบรารี:

  • ติดตั้งไลบรารี PubSubClient ผ่าน Arduino IDE Library Manager
  • ค้นหา "PubSubClient" และติดตั้ง

การเขียนโค้ด:

  • Include ไลบรารีและสร้าง Object: WiFiClient espClient และ PubSubClient client(espClient)
  • ตั้งค่า MQTT Server และ Port: client.setServer("192.168.1.100", 1883)
  • สร้างฟังก์ชัน Callback สำหรับรับข้อความ: void callback(char* topic, byte* payload, unsigned int length)

การประมวลผลข้อความที่ได้รับ:

ในฟังก์ชัน Callback ให้แปลง payload เป็น String และตรวจสอบว่าเป็นคำสั่งอะไร:

  • ถ้าได้รับ "ON" ให้ส่งสัญญาณ RF เพื่อเปิดไฟ
  • ถ้าได้รับ "OFF" ให้ส่งสัญญาณเพื่อปิดไฟ

การ Publish ข้อความ:

  • ใช้ client.publish("home/switch/status", "ON") เพื่อส่งสถานะไปยัง Topic ที่กำหนด

การ Subscribe:

  • ใช้ client.subscribe("home/switch/command") เพื่อรับคำสั่งจาก Topic ที่กำหนด

การจัดการการเชื่อมต่อ:

  • เพิ่มการตรวจสอบการเชื่อมต่อ MQTT และ Reconnect อัตโนมัติเมื่อการเชื่อมต่อขาดหาย
  • if (!client.connected()) { reconnect(); }
  • เรียก client.loop() ใน Loop หลักเพื่อให้ MQTT ทำงานอย่างต่อเนื่อง

ตัวอย่างการทำงานแบบครบวงจร:

  • ขั้นที่ 1: เมื่อกดปุ่มบนรีโมท RF, ESP32 จะรับสัญญาณและ Publish สถานะไปยัง MQTT Topic เช่น "home/living_room/light" = "ON"
  • ขั้นที่ 2: Home Assistant จะรับข้อความนี้และอัพเดทสถานะของ Switch Entity
  • ขั้นที่ 3: เมื่อผู้ใช้กด Switch ใน Home Assistant, Home Assistant จะ Publish คำสั่งไปยัง Topic เช่น "home/living_room/light/set" = "OFF"
  • ขั้นที่ 4: ESP32 จะรับคำสั่งและส่งสัญญาณ RF ไปปิดไฟ
MQTT Communication Flow
ภาพ: การทำงานของ MQTT ระหว่าง ESP32, MQTT Broker และ Home Assistant

Home Assistant integration

Home Assistant เป็นแพลตฟอร์ม Open Source สำหรับการสร้างระบบบ้านอัจฉริยะที่รองรับอุปกรณ์หลากหลายยี่ห้อและโปรโตคอล

การเชื่อมต่อ:

การเชื่อมต่อ ESP32 RF Switch กับ Home Assistant ทำได้โดยใช้ MQTT Integration ซึ่งมีอยู่ใน Home Assistant โดยค่าเริ่มต้น

ขั้นตอนการตั้งค่า:

1. ติดตั้ง MQTT Broker:

  • ติดตั้ง Mosquitto บน Home Assistant
  • ไปที่ Settings > Add-ons > Add-on Store
  • ค้นหา "Mosquitto broker" และติดตั้ง

2. ตั้งค่า MQTT Integration:

  • ไปที่ Settings > Devices & Services
  • Add Integration > ค้นหา "MQTT" และเพิ่ม

3. สร้าง Configuration สำหรับ Switch Entity:

ในไฟล์ configuration.yaml เพิ่มโค้ดดังนี้:

  • mqtt:
  •   switch:
  •     - name: "Living Room Light"
  •       state_topic: "home/living_room/light"
  •       command_topic: "home/living_room/light/set"
  •       payload_on: "ON"
  •       payload_off: "OFF"
  •       state_on: "ON"
  •       state_off: "OFF"
  •       optimistic: false
  •       retain: true

4. Restart Home Assistant:

Restart Home Assistant เพื่อให้การตั้งค่ามีผล

5. ทดสอบ:

  • เปิด Home Assistant Dashboard และหา Switch Entity ที่สร้างไว้
  • ลองกดเปิด-ปิดและดูว่า ESP32 ส่งสัญญาณ RF ไปควบคุมอุปกรณ์ได้หรือไม่

การสร้าง Automation:

สามารถสร้าง Automation ใน Home Assistant เพื่อควบคุมอุปกรณ์ตามเงื่อนไขต่างๆ เช่น:

  • เปิดไฟอัตโนมัติเมื่อตรวจจับการเคลื่อนไหว
  • ปิดไฟเมื่อไม่มีคนในห้อง
  • เปิดพัดลมเมื่ออุณหภูมิสูงเกินกำหนด
  • ควบคุมผ่าน Voice Assistant เช่น Google Home หรือ Amazon Alexa

การเชื่อมต่อกับ Voice Assistant:

สามารถควบคุมผ่าน Voice Assistant ได้ด้วยการเชื่อมต่อ Home Assistant กับบริการเหล่านี้

การแสดงผลที่สวยงาม:

สามารถใช้ Lovelace Card ต่างๆ เพื่อสร้าง Dashboard ที่ใช้งานง่ายและสวยงาม:

  • Button Card
  • Mushroom Card
  • Custom Cards อื่นๆ

Source and further links

สำหรับผู้ที่สนใจศึกษาเพิ่มเติมหรือต้องการโค้ดตัวอย่างที่สมบูรณ์ สามารถดูได้จากแหล่งข้อมูลต่อไปนี้:

เอกสารและ Repository:

  • GitHub Repository ของโปรเจคนี้ - มีโค้ดเต็มรูปแบบพร้อมคำอธิบาย
  • RCSwitch Library - https://github.com/sui77/rc-switch มีตัวอย่างและคำอธิบายการใช้งานโดยละเอียด
  • IotWebConf Library - https://github.com/prampec/IotWebConf สำหรับการตั้งค่า WiFi และพารามิเตอร์ผ่าน Web Interface
  • PubSubClient Library - https://github.com/knolleary/pubsubclient สำหรับการใช้งาน MQTT
  • Home Assistant MQTT Integration - https://www.home-assistant.io/integrations/mqtt/ สำหรับการตั้งค่าและใช้งาน MQTT กับ Home Assistant

ฟอรัมและ Community:

  • Home Assistant Community Forum
  • ESP32 Forum
  • Arduino Forum
  • มีผู้ใช้งานแชร์ประสบการณ์และช่วยเหลือกันแก้ปัญหา

YouTube Channels แนะนำ:

Channels ที่สอนเกี่ยวกับ ESP32, Home Assistant และ IoT:

  • Andreas Spiess
  • DrZzs
  • The Hook Up

ไอเดียการต่อยอดโปรเจค:

  • เพิ่มการควบคุมผ่าน Web Interface โดยตรงบน ESP32
  • เพิ่มการบันทึก Log และ Statistics
  • เพิ่มการรองรับ RF Protocol อื่นๆ
  • เพิ่มการควบคุมผ่าน Bluetooth
  • สร้าง Mobile App สำหรับควบคุมโดยตรง

สนับสนุน / ช้อปอุปกรณ์ / เข้าร่วม Community

หากคุณสนใจอุปกรณ์ ESP32, โมดูล RF, โมดูลรีเลย์ และอุปกรณ์ IoT อื่นๆ หรืออยากพูดคุยแลกเปลี่ยนความรู้กับเพื่อนๆ ในสาย GlobalByte สามารถกดปุ่มด้านล่างนี้ได้เลย

อ้างอิงเนื้อหาจาก willowherring.dev/blogs/blog-17.html

แท็ก


ฝากความคิดเห็น

ฝากความคิดเห็น

Blog posts

  • ESP32 + MQTT: สร้างสวิตช์ควบคุมอุปกรณ์ไฟฟ้าผ่านเน็ตเวิร์ก

    , โดย Global Byte Shope ESP32 + MQTT: สร้างสวิตช์ควบคุมอุปกรณ์ไฟฟ้าผ่านเน็ตเวิร์ก

  • Switch Hub อุปกรณ์เน็ตเวิร์ค | Global Byte

    , โดย Global Byte Shope Switch Hub อุปกรณ์เน็ตเวิร์ค | Global Byte

  • IOT Gateway คืออะไร มีหลักการทำงานและประโยชน์อะไรบ้าง

    , โดย Global Byte Shope IOT Gateway คืออะไร มีหลักการทำงานและประโยชน์อะไรบ้าง

  • เทคนิคง่ายๆ : ที่ทำให้โค้ด Python ของคุณเร็วขึ้น

    , โดย Global Byte Shope เทคนิคง่ายๆ : ที่ทำให้โค้ด Python ของคุณเร็วขึ้น

© 2025 บริษัท โกลบอลโทรนิค อินเตอร์เทรด จํากัด, ขับเคลื่อนโดย Shopify

    • PayPal

    เข้าสู่ระบบ

    ลืมรหัสผ่านใช่ไหม?

    ยังไม่มีบัญชีใช่ไหม?
    สร้างบัญชี