Ameba Arduino: [RTL8710AF] 使用 Dragino Lora 扩展版
材料准备
- Ameba RTL8710 Board x 2
- Dragino LoRa Shield x 2
范例说明
Dragino Lora扩展板基于开放源码库,允许用户发送数据,能够达到极长的传输范围,并且在低data-rates提供超远距离扩频通信和高抗干扰性的同时尽量减少电流消耗,而因各个国家有不同的频段规划,在购买时请留意LoRa Shield所使用的频段。
LoRa Library请至下列连结下载:
https://github.com/Ameba8195/Arduino/blob/master/libraries/AmebaLoRa.zip
安装library的方式请参考Arduino官方网站的教学文章将zip档的library加入Ameba:
https://www.arduino.cc/en/Guide/Libraries#toc4
Dragino LoRa Shield SPI范例接线说明如下:
Dragino LoRa Shield可以直接嵌合在Ameba RTL8710板子上,但由于Ameba RTL8710的CS引脚与标准的SPI协议相比有其特殊性,因此Dragino LoRa Shield的CS引脚不能直接与Ameba RTL8710的CS引脚相连, 在此在Dragino LoRa Shield上的修改需要CS pin也就是pin 10的脚位往内扳,并且使用杜邦线接到pin 5,如下图:
而Dragino LoRa Shield的SPI Data是从ICSP的SPI BUS产生的,因此如同以下图示接至AMEBA的SPI脚位:
- 范例使用说明
本范例中同时使用send及receive程式码,来作2块Dragino LoRa Shield的功能验证,一块是发送端,另一块是接收端,我们打开范例“File” -> “Examples” -> “AmebaLoRa ” -> “LoRaSender”及LoRaReceiverCallback, 分别编译并上传至Ameba之后按下Reset按钮,就可以在终端机看到底下的结果:
程式码说明
程式开始时进入setup()会先利用begin() method初始化LoRa class,里头带的参数915E6与其RF的频率相关,在此不作变更
LoRa.begin(915E6);
LoRaSender发送端:
进入loop()里,发送端的工作则是先呼叫beginPacket() method,开始进入发送的程序,而使用print(“hello ”) method,则可以让LoRa送出hello字串的参数,最后再呼叫endPacket( ) method,即完成发送端的程序
LoRa.beginPacket(); LoRa.print("hello "); LoRa.print(counter); LoRa.endPacket();
LoRaReceiverCallback接收端:
本接收端范例使用onReceive callback的方式来接收传送端送过来的讯息,在setup()里,作完begin() method后利用onReceive(void * cbfunction) method,来触发注册的cbfunction函式
LoRa.onReceive(onReceive); LoRa.receive();
接着使用receive() method进入LoRa的receive mode
范例中在onReceive里注册的callback函式名称为onReceive,当被触发时会带有收到多少字节的packetSize参数
void onReceive(int packetSize) { // received a packet Serial.print("Received packet '"); // read packet for (int i = 0; i < packetSize; i++) { Serial.print((char)LoRa.read()); } // print RSSI of packet Serial.print("' with RSSI "); Serial.println(LoRa.packetRssi()); }
要读取收到的字节只要呼叫read() method,范例中使用了回圈,依收到字节的大小依序印出字串:
for (int i = 0; i < packetSize; i++) { Serial.print((char)LoRa.read()); }
最后使用packetRssi() method可以得到目前RSSI的数值
Serial.println(LoRa.packetRssi());