LoRa กับ Raspberry Pi และ Arduino แบบ Peer to Peer

Mountain A
4 min readJul 24, 2021

วันนี้เราจะลองมาใช้งาน LoRa Module ขนาดเล็กกะทัดรัด RA-02 ของ AI-Thinker กันนะครับ

สำหรับวันนี้เราจะลองมาใช้งานแบบ Peer to Peer กันนะครับ คือส่งข้อมูลระหว่างบอร์ดกับ Raspberry Pi ยังไม่ได้ไปยุ่งเกี่ยวกับ Application Server อย่าง The Things Network นะครับ (ไว้ต่อโอกาสหน้า)

ก่อนอื่นอยากจะเกริ่นให้คร่าวๆ ก่อนว่า LoRa คืออะไร แล้วเอาไว้ทำอะไรซะหน่อยก่อนที่จะเข้าเรื่องนะครับ

LoRa เป็นวิธีการสื่อสารด้วยสัญญาณวิทยุที่มีความสามารถในการส่งสัญญาณได้ไกล (เมื่อเทียบกับ Wifi หรือ Bluetooth) โดยย่อมาจาก Long Range ที่ว่าไกลนี่ บางคนทำได้เป็น 1–2 กิโลเมตร ในที่โล่งเลยที่เดียว แต่เอาเป็นว่าที่ผมเคยลองในสถานการณ์จริง ก็น่าจะได้เกือบๆ 500 เมตรครับ ลองอ่านบทความนี้ดู

แต่หากต้องการให้สื่อสารได้ไกลกว่านั้น ครอบคลุมพื้นที่เป็น 10 ตารางกิโลเมตร ก็มีวิธีการสื่อสารเป็นแบบโครงข่ายของ LoRa ได้ ซึ่งแบบนี้เขาเรียกกันว่า LoRaWAN (Long Range Wireless Area Network) อันนี้นอกเหนือจากเรื่องที่เขียนในบทความนี้นะครับ ยกยอดไปครั้งหน้า

สำหรับการใช้งานของ LoRa นั้น มีคนเอาไปประยุกต์ใช้ทำโครงข่าย IOT เพื่อวัด และสั่งการผ่านอุปกรณ์แสดงผลที่อยู่ห่างออกไปไกลๆ เช่น ต้องการวัดค่า PM2.5 ที่กลางสนาม หรือ วัดค่าต่างๆ สำหรับ smart farming และสามารถสั่งให้อุปกรณ์ที่ปลายทาง (Node) ทำงานได้ด้วย เช่น สั่งให้มอเตอร์ทำงาน สั่งให้เปิดปิดไฟแสงสว่าง อันนี้สุดแล้วแต่การนำไปประยุกต์ใช้ของแต่ละคน

หน้าตาของ LoRa ก็มีอยู่หลายแบบครับ เนื่องจากมีหลายผู้ผลิตให้ความสนใจเข้ามาพัฒนา เช่น ค่าย Semtech ซึ่งผลิต chip sx1276 sx1278 … ทีนี้มีแต่ Chip ก็ใช้งานยาก จึงมีบริษัทเอาไปพัฒนาต่อให้อยู่ในรูปโมดูลที่ใช้งานได้ง่ายขึ้น เช่น Ai-Thinker พัฒนาออกมาเป็นโมดูล Ra-02 ตามรูปด้านล่างนี้ (บริษัท Ai-Thinker เป็นบริษัทในประเทศจีน ซึ่งเป็นผู้ผลิตโมดูล ESP8266 และ ESP32 ใน NodeMCU

LoRa module SX1278
โมดูล SX1278 โดย AI-Thinker

โมดูล LoRa Ra-02 แบบนี้ สามารถใช้งานได้กับ NodeMCU และ Raspberry Pi ได้โดยตรง ไม่ต้องแปลงแรงดันไฟฟ้า เนื่องจาก Vin และ Pin ต่างๆ รับแรงดันที่ 3.3 V มีรายละเอียดของแต่ละขาดังนี้

Pin ต่างๆ ของ Ra-02

จะเห็นจากตารางด้านบนว่า การเชื่อมต่อกับบอร์ดไมโครคอนโทรลเลอร์ หรือ Raspberry Pi ก็ใช้การสื่อสารแบบ SPI

อีกข้อมูลที่ผู้ใช้งานจำเป็นต้องทราบคือ LoRa นั้นเป็นสัญญาณวิทยุที่มีให้เลือกหลายความถี่ ทั้งแบบที่ใช้ในอเมริกา ยุโรป และเอเชีย ต้องเลือกให้เหมาะสม และถูกกฎหมายนะครับ สำหรับวันนี้ผมเลือกใช้โมดูลที่ใช้ความถี่ 433 MHz ซึ่งเป็นความถี่ที่ กสทช. ให้ใช้โดยไม่ต้องขออนุญาต หากมีกำลังส่งไม่เกิด 15 mW

มาถึงการต่อวงจรเพื่อสื่อสารกับไมโครคอนโทรลเลอร์และ Raspberry Pi กันแล้วครับ ในบทความนี้จะมีให้เลือก 2 แบบ คือ

  1. ต่อเอาเองแบบรูปด้านล่าง

2. ซื้อสำเร็จรูปคือเป็นแบบที่ออกแบบมาแล้วจากผู้ผลิต

การเชื่อมต่อระหว่าง sx1278 กับบอร์ด Arduino หรือ Raspbery Pi นั้น ใช้การสื่อสารแบบ SPI ซึ่งจะมีขาที่ต้องต่อ ได้แก่ MOSI, MISO, SCK, RST, CS (NSS), 3.3V, GND, DIO0 และกำหนดขา GPIO ที่ต่อกับบอร์ดไว้ใน Sketch ให้ถูกต้อง

มาเริ่มต่อกันดูครับ

เริ่มจากแบบที่ 1 ต่อเอาเองก่อนนะครับ ข้อดีคือ ราคาถูกกว่า และโมดูลนี้เราสามารถใช้ได้กับทั้ง NodeMCU บอร์ด Arduino และ Raspberry Pi

การต่อ Ra-02 กับ ESP8266 NodeMCU
รูปจาก https://how2electronics.com/lora-sx1278-esp8266-transmitter-receiver/

ถ้าจะต่อกับ ESP8266 NodeMCU ก็ต่อแบบนี้

แบบที่ 2 ซื้อแบบสำเร็จรูปก็มีหลายแบบให้เลือก ตัวอย่างได้แก่ บอร์ดของ TTGO ซึ่งไม่ต้องมาต่อสายเอง เพียงแต่กำหนด Pin ในโปรแกรมให้ถูกต้อง

https://www.arduitronics.com/product/2198

หลังจากที่ต่อโมดูล sx1278 กับบอร์ด Arduino แล้วก็มาต่อกับ Raspberry Pi กันบ้าง

การต่อระหว่าง sx1278 และ Raspberry Pi

การต่อกับ Raspberry Pi นั้น ต้องเล็งให้ถูก Pin นะครับ โดยมีข้อสังเกตุคือ GPIO ที่ระบุไว้ในตารางด้านซ้ายนี้ ไม่ใช่ Pin number ดังนั้นต้องไปดูประกอบกับ Pin Diagram ของบอร์ดที่ใช้อีกที เช่น GPIO10 ของ Raspberry Pi 4 Model ฺB จะอยู่ที่ขาที่ 19 แบบที่ต่อในรูปด้านบนครับ

ต่อวงจรเสร็จแล้วก็ได้เวลามาลงโปรแกรมทั้งฝั่งบอร์ด Arduino และ Raspberry Pi กันครับ

มาดูที่ฝั่ง Arduino กันก่อน

ขั้นตอนที่ 1 เลือกบอร์ดที่ใช้งานให้ตรง ในต้วอย่างนี้ผมใช้ Nodemcu 8266

2. Sketch ที่ใช้ก็ตามนี้ครับ

3. สำหรับ Raspberry Pi

อันดับแรกต้องเตรียมให้ Raspberry Pi สามารถใช้ SPI port ได้ซะก่อน และถ้าให้ง่ายหน่อย ก็เตรียมให้ทำ Remote Desktop แบบ Fix IP นะครับ

ทีนี้ที่อยากจะบอกไว้ก่อน เพื่อไม่ให้ต้องเสียเวลาแบบผม นั่งเกาหัวอยู่ 2 วัน ก็คือ การใช้งาน Raspberry Pi โดยเฉพาะ Version 4 Model B จะต้องใช้งานคู่กับ Adapter ที่จ่ายแรงดัน 5.1 V โดยจ่ายกระแสได้ 3.0 A นะครับ ถ้าใช้ Adapter แบบอื่นๆ แล้วคิดว่าจ่ายพอ Raspberry Pi อาจจะทำงาน แต่ Hardware ที่มาต่อพ่วงอาจจะทำงานแบบไม่ปกติ เช่น ทำงานบ้าง ไม่ทำงานบ้าง หรือ ไม่ทำงานเลย ทั้งๆที่ ตัว Raspberry Pi ก็สามารถใช้งานได้ปกติ ถ้าให้ดีใช้พวก Official Adapter ก็จะมั่นใจกว่าครับ

รายละเอียดไปตามนี้ครับ

มาจัดการเรื่อง IP Address ของ Raspberry Pi กันก่อนเพื่อให้เวลา Login จะไม่ต้องมานั่งควานหา IP กัน

หากเริ่มต้นจาก Noobs ที่เพิ่งลงใหม่สด ให้เริ่มจาก

ขั้นที่ 1 ให้ update OS

sudo apt-get update

ขั้นที่ 2 ให้ตั้งตั้งค่า IP Address ให้เป็นแบบ Static ซึ่งสามารถทำได้แบบทั้งใช้สาย line หรือ Wifi

ขั้นที่ 3 โหลด Xrdp มาใช้กัน ดูตามด้านล่างครับ

https://pypi.org/project/pyLoRa/

เสร็จจากขั้นตอนนี้เราจะสามารถ Login เข้า Raspberry Pi โดยผ่านหน้าจอ Windows ซึ่งจะเห็นเป็นแบบด้านล่าง

ขั้นที่ 4 คราวนี้ก็มาตั้งค่าเพื่อใช้ใช้งาน SPI กันได้ก่อน โดยเลือกที่ Terminal และพิมพ์

sudo raspi-config

จะเห็นแบบด้านล่างนี้

จากนั้นเลือก Option ที่ 3 Interface Options และไปที่ P4 SPI และกด Yes

ขั้นที่ 5 เสร็จแล้วกลับออกไปที่ Terminal และจัดการให้ Raspberry Pi ยอมให้เราใช้งาน GPIO

pip install RPi.GPIO

ขั้นที่ 5 เสร็จแล้วตามด้วย เพื่อใช้งาน SPI

pip install spidev

ขั้นที่ 6 จากนั้นก็ถึงขั้นตอนการลง Library เพื่อใช้งาน LoRa

pip install pyLoRa

ขั้นที่ 7 เพื่อให้ให้ใช้งาน Python ในการควบคุม SPI และ GPIO ให้ทำตามนี้

sudo apt-get install python-rpi.gpio python3-rpi.gpio
sudo apt-get install python-spidev python3-spidev

ถ้าเสร็จแล้วก็จะได้ประมาณนี้ครับ

ขั้นที่ 8 คราวนี้มาจัดการเรื่องโปรแกรมที่เขียนด้วย Python เพื่อติดต่อด้วย LoRa กัน โปรแกรมที่ใช้เราจะ Clone มาจาก github นะครับ

sudo apt-get install git
sudo git clone https://github.com/rpsreal/pySX127x

เข้าไปแก้ให้มีความถี่ตรงกันระหว่างตัวส่งกับตัวรับด้วยครับ

ถ้าสังเกตใน Sketch และ ใน Code python จะเห็นว่าเลือกความถี่ 434 MHz ตรงกันทั้ง 2 ฝั่ง

ดูรายละเอียดการติดตั้งโปรแกรมฝั่ง Raspberry Pi ที่

ลงโปรแกรมเสร็จแล้วความนี้ก็ถึงเวลาทดสอบการทำงานกัน

--

--