วิธี Flash Firmware Ra-08H Module และวิธีใช้งานเบื้องต้นด้วย PCB M2M

Somsak Lima
6 min readJul 21, 2023

--

Spec คร่าวๆ

Model: Ra-08H
Package: SMD-18
Antenna: Half-hole pad / through-hole pad / IPEX
Frequency: สามารถลง Firmware AS923 ความถี่ (923–925Mhz)
Operating Temperature: -40 ~ +85°C
Storage Temperature: -40 ~ +125°C, <90%RH
Power Supply: Voltage 2.7V ~ 3.6V, Current >500mA
Interface: UART / GPIO / ADC / DAC / I2C / I2S / SPI / PWM
IO: IO2, IO4, IO5, IO8, IO9, IO11, IO14, IO15
UART Rate: Supports 110 ~ 4608000 bps, Default 115200 bps
Crystal Frequency: 32 MHz
SPI Flash: 128KB
Transfer Protocol: LoRaWAN, LinkWAN
Dimensions: 16 x 16 x 3.2mm
TX Power: theoretical transmit power: 17 dBm (AS923)

Datasheet คลิก

เพื่อให้การใช้งานง่ายขึ้น เราจะใช้มอดูล Ai Ra-08H กับ PCB Adapter ของ M2M ดังภาพ แผ่น PCB และชุดอุปกรณ์ประกอบไม่รวมมอดูล Ra-08H สามารถสั่งซื้อได้ที่ คลิก

เพื่อให้สามารถเชื่อมต่อกับขาที่จำเป็นต้องการใช้งานง่ายๆ

หลังจากบัดกรีมอดูลลงบนแผ่น PCB และอุปกรณ์อื่นๆ แล้ว ก็จะได้ดังภาพ

วิธี Flash Firmware AS923

ปรกติเราสามารถเลือกมอดูลที่ติดตั้ง Firmware ความถี่ประเทศไทย แต่หากเราจำเป็นต้องลง Firmware ใหม่ให้ทำดังต่อไปนี้

ไปที่หน้าเวป Firmware ของบริษัท เพื่อ Download โปรแกรม Burning Tool และ ไฟล์ Firmware คลิก ให้ Donwload ลงเครื่อง PC ไว้

อุปกรณ์ที่ใช้ในการ Flash Firmware

วิธีการเชื่อมต่อเพื่อ Flash Firmware

***ย้าย Jumper จาก 5V ไปที่ 3V ด้วย

Ra-08H module=====USB to TTL
3.3V — — — — — — — — - 3.3V
GND — — — — — — — — GND
RXD0 — — — — — — —- TX
TXD — — — — — — — — -RX
DIO2 — — — — — — — — DTR

  1. เรียกโปรแกรม Tremo Programmer เลือก Com Port และเลือก Files ความถี่ AS923 ที่ Download มา
  2. หาก Flash ผ่าน PCB M2M A1.4 ให้ต่อ DTR เข้า Pin Header ข้าง Micro Switch ด้วย และให้สลับ Switch มาทางด้าน Flash แล้วกด reset 1 ครั้งก่อนคลิก Erase All
  3. ตามด้วยกด Start หากเห็น Downloaded Files Successfully แสดงว่า Flash Firmware สำเร็จ

วิธีการใช้งาน

วิธีที่ 1 เหมาะกับการทดสอบการทำงานของมอดูล
การใช้งานต่อ USB to TTL Serial Port

Ra-08H module=====USB to TTL
3.3V — — — — — — — — — 3.3V
GND — — — — — — — — GND
LPRXD— — — — — — —TX
TXD — — — — — — — — -RX

ไม่ต้องต่อขา DTR

  1. เรียกโปรแกรม Termite (ให้ปิดโปรแกรม Tremo Programmer ก่อน เพราะจะ Lock จอง Serial Port อยู่)

2.คลิก Setting ตั้งค่า Com Port ให้ถูกต้อง ค่าอื่นๆ เป็นค่า Default ของโปแกรม ไม่ต้องแก้ (เช่น Baud Rate 9600, Data bit 8, Stop bits 1, Parity None และอื่นๆ ตามรูป) แล้วคลิก OK

2.ลองกดปุ่ม MicroSwitch RST 1 ครั้งจะเห็นข้อความเช่น

3.ช่องคำสั่งล่างสุดให้ป้อนคำสั่ง เช่น AT+CDEVEUI? แล้วกด Enter หากปรกติจะเห็นหน้าจอแสดงค่า DEVEUI ออกมา

ทดลองคำสั่ง AT Command เปลี่ยนค่า DEVEUI และเลือก JOIN แบบ OtAA และ Save เก็บไว้

AT+CDEVEUI=1200000000000002
AT+CJOINMODE=0
AT+CSAVE

ลองกด RESET ดู

ลองสั่งคำสั่งเพื่อเชื่อมต่อ

AT+CADR=0
AT+CDATARATE=2
AT+CULDLMODE=1
AT+CDEVEUI?
AT+CAPPKEY?
AT+CAPPEUI?
AT+CJOIN=1,0,8,1

ถ้ามีการใส่ Dev OTAA ไว้ที่ LoRaWAN Network Server และ Gateway ทำงานรับส่งปรกติ จะเห็นข้อความ CJOIN:OK และ Joined

AT+CSTATUS?
AT+DTRX=1,1,18,016701120268950373006406010107032ee0

ค่า CSTATUS จะเท่ากับ 4 และหากส่ง ข้อมูล Cayenee.LLP format และ Decode ด้วยรูปแบบ Cayenne หากใช้ Chirpstack คลิกบรรทัด Events จะเห็น Object เช่น

รูปแบบการส่งข้อมูล AT+DTRX=[confirm],[nbtrials],LENGTH, Payload

AT+DTRX=1,1,36,016701120268950373006406010107032ee0

กรณี Confirm หน้าจอจะแสดง

AT+DTRX=1,1,36,016701120268950373006406010107032ee0
OK+SEND:12
ASR6601:~# TX on freq 924400000 Hz at DR 5
RX on freq 924400000 Hz at DR 5
OK+SENT:01
receive data: rssi = -85, snr = 6, datarate = 5
rx, ACK, index 3
OK+RECV:02,00,00

หากไม่ Confirm จะแสดงออกมาแค่

AT+DTRX=0,1,36,016701120268950373006406010107032ee0
OK+SEND:12
ASR6601:~# TX on freq 923800000 Hz at DR 5
RX on freq 923800000 Hz at DR 5
RX on freq 923200000 Hz at DR 2
OK+SENT:01

ตัวอย่างการ ขั้นตอนคำสั่ง ทดสอบการ Join แบบ ABP หรือ OTAA และการส่งข้อมูล

ตัวอย่าง คำสั่งส่งข้อมูลหลัง Joined และหากเลือกรูปแบบ Decode เป็น Cayenne.LPP จะเห็นข้อมูลดังนี้

AT+DTRX=0,2,36,016701120268950373006406010107032ee0

เมื่อเข้าไปดูข้อมูลบหน้า Console The Things Network จะเห็น Payload ที่รับได้ดังนี้

"decoded_payload": {
"analog_out_7": 120,
"barometric_pressure_3": 10,
"digital_out_6": 1,
"relative_humidity_2": 74.5,
"temperature_1": 27.4
},

วิธีที่ 2 ต่อกับ ESP32 และใช้ภาษา MicroPython

เชื่อมต่อกับ Sensor BME280 เพื่ออ่านค่าอุณหภูมิและความชื้นแล้วส่งต่อผ่านคลื่น LoRaWAN

ตัวอย่างที่ 1 Blink.py

from machine import Pin
led = Pin(2, Pin.OUT)
while True:
led.value(1)
sleep(0.5)
led.value(0)
sleep(0.5)

ตัวอย่างที่ 2 BME280.py

from machine import Pin, SoftI2C
import machine
import bme280
temp = 0
pa = 0
hum = 0
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000) #ESP32 Dev Board /myown
bme = bme280.BME280(i2c=i2c)
temp,pa,hum = bme.values
print(bme.values)
print(temp)
print(pa)
print(hum)

ผลการ RUN เช่น

>>> %run -c $EDITOR_CONTENT
(‘30.81’, ‘1008.24’, ‘56.91’)
30.72
1008.22
57.24

ตัวอย่างที่ 3 SendUART.py

กำหนดค่า DEVEUI, APPKEY, APPEUI ใหม่แล้ว Save ลงมอดูล

from machine import UART
uart = UART(2, 9600,timeout=1000)
def sendATcommand(ATcommand):
print("Command: {0}\r\n".format(ATcommand))
uart.write("{0}\r\n".format(ATcommand))
rstr=uart.read().decode('utf-8')
print(rstr)
return (rstr)
sendATcommand ("AT+CDEVEUI=1200000000000002")
sendATcommand ('AT+CAPPKEY=20000000000000000000000000000001')
sendATcommand ('AT+CAPPEUI=0000000000000000')
sendATcommand ('AT+CSAVE')
sendATcommand ("AT+CDEVEUI?")

ตัวอย่างที่ 4 ส่งข้อมูล จาก Sensor BME280

import machine
import bme280
import time
import ubinascii
from machine import UART, Pin, SoftI2C
from cayennelpp import CayenneLPP
stop = False
motion = 0
led = Pin(2, Pin.OUT)
relay1 = Pin(12, Pin.OUT)
temp = 0
pa = 0
hum = 0
i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=10000)
bme = bme280.BME280(i2c=i2c)
uart = UART(2, 9600, timeout=300)
def sendATcommand(ATcommand):
rstr = ""
print("Command: {0}\r\n".format(ATcommand))
uart.write("{0}\r\n".format(ATcommand))
rstr = uart.read().decode('utf-8')
print(rstr)
return (rstr)
mot = machine.Pin(15)
motion = (mot.value())
sendATcommand('AT+CADR=0')
sendATcommand('AT+CDATARATE=2')
sendATcommand('AT+CULDLMODE=1')
sendATcommand("AT+CDEVEUI?")
sendATcommand("AT+CAPPKEY?")
sendATcommand("AT+CAPPEUI?")
sendATcommand("AT+CJOIN=1,0,8,1")
time.sleep(20.0)
arstr = ''
arstr = sendATcommand('AT+CSTATUS?')
while '+CSTATUS:04' not in arstr:
print('Retry OTAA Continue')
sendATcommand('AT+CJOIN=1,0,8,2')
time.sleep(20.0)
arstr = ''
arstr = sendATcommand('AT+CSTATUS?')
if '+CSTATUS:04' in arstr:
print('++++OTAA OK+++++')
break
if '+CSTATUS:04' in arstr:
print('++++OTAA OK+++++')
#Send Sample data
sendATcommand('AT+DTRX=0,2,6,445566')
cnt = 1
while True:
print("----------Wait 10 Second---------")
time.sleep(10.0)
print("\r\n\r\nPacket No #{}".format(cnt))
temp, pa, hum = bme.values
print("*********************")
print("BME280/BMP280 values:")
print("*********************")
temp, pa, hum = bme.values
print('temp:', temp, ' Hum:', hum , 'PA:', pa)
c = CayenneLPP()
c.addTemperature(1, float(temp))
c.addRelativeHumidity(3, float(hum))
b = (ubinascii.hexlify(c.getBuffer()))
led.value(1)
print('')
print('************ Sending Data Status **************')
sendATcommand('AT+DTRX=0,1,{0},{1}'.format(int(len(b)),(b.decode('utf-8'))))
print('********Finish Sending & Receiving Data Status******')
led.value(0)
cnt = cnt + 1

การกำหนดกำลังส่งให้เป็นไปตามกฎหมาย

ให้ตั้งค่ากำลังส่ง TX Power (AT+CTXP) เป็นไปตามข้อกำหนดของแต่ละประเทศ เช่น ประเทศไทย อาจจะตั้งไว้ที่ 17 dBm หรือประมาณ 50mW กรณีที่ใช้สายอากาศที่ไม่มีเกณฑ์ขยาย หรือตั้งไว้ที่ 15 dBm กรณีที่ใช้สายอากาศที่มีเกณฑ์ขยาย 2 dฺBm ซึ่งจะจำกัดกำลังส่งออกอากาศให้ไม่เกิน 50mW (eirp) ค่า CTXP สามารถตั้งได้ตั้งแต่ 0–7 ตามตาราง

AT+CTXP=1
AT+CSAVE

กดปุ่ม RESET แล้วลองใช้คำสั่งเช็คค่าปัจจุบันที่ Save ไว้

AT+CTXP?
+CTXP:1
OK

อาจจะใช้โปรแกรม SSCOM แทน Termite

เลือก ComNum, ติก เลือก SendNew , กด Open Com
สามารถบันทึก คำสั่งที่ใช้บ่อยไว้ด้านขวาจอ

เมื่อดูบน TTN Sandbox จะเห็นข้อมูลเข้า

ถ้าใช้ SSCOM V.5.13.1 ให้ติกเลือก AddCrLf และติกเอา Show Time and Packet ออก

หมายเหตุ

--

--

Somsak Lima
Somsak Lima

Written by Somsak Lima

สนับสนุนและส่งเสริมให้ผู้สนใจสามารถใช้งานเทคโนโลยี LoRa และ LoRaWAN ได้ โดยนำความรู้ที่ได้ไปต่อยอดเพื่อใช้งาน

Responses (1)