侵权投诉
当前位置:

OFweek物联网

传感器

正文

用LoRa模块做CO感测简单范例

导读: 对于刚开始入手LoRa的Maker,可能没甚么信心可以抓住重点,但事实上,LoRa架构很简单,只要Node与Gateway频道的频率设定相同,以及与Server新增装置的 key设定一样,就可以成功做数据传输的动作了。 本专案用AcSip群登 S76S LoRa模块做CO感测,作为一个简单范例。

对于刚开始入手LoRa的Maker,可能没甚么信心可以抓住重点,但事实上,LoRa架构很简单,只要Node与Gateway频道的频率设定相同,以及与Server新增装置的 key设定一样,就可以成功做数据传输的动作了。

本专案用AcSip群登 S76S LoRa模块做CO感测,作为一个简单范例。

材料

1. AcSip S76S LoRa积木式模块与0dB天线

2.MQ-9一氧化碳CO感测模块

3.Arduino Mega 2560

4.一些公对母、公对公杜邦线

5.一台LoRa Gateway;道理就像一般所使用的网关一样,只是从不同网段的转送,变成LoRa与因特网间的转送。我们这次用Kiwitec TLG2901 High Capacity Gateway。

说明一下:LoRa若要能够接通必须要有两个关键。如前述所言,一个是频率、一个是Key,像是AcSip S76S这个LoRa积木式模块出厂时设定为868MHz,但能用韧体调整为915MHz,所以使用上请先记得参考LoRa模块以及Gateway的说明书确定。

硬件接线

对于MQ-9一氧化碳感测模块,可以参考下表:

以下为AcSip S76S LoRa积木式模块的脚位图,接线的方式如下图。

特别提醒一下,S76S模块内部已经有跳线将TX、RX能直接对应到用户的电路上,所以请勿反接。

软件部分

LoRa传输的时候,LoRa node上的程序有三个项目要做:

A. 加入ABP,Key与Server设定的Device相同,就能成功把payload解密

B. LoRa node决定用哪个Port用来发送讯息

C. 决定用确认(cnf)或非确认(ucnf)的方式来传输讯息给LoRaServer

我们采用非确认的方式,Port在我们这里是设定为2。至于传输的命令嘛~~就跟透过Serial把字符串输出给device一样,够容易吧!

参考程序代码如下

#include <SoftwareSerial.h>

SoftwareSerial lora(5, 4);

#define TX_PORT 2 // Up to gatewaydefinition #define RX_PORT 1

char dat[64];

void setup() { // put your setup code here,to run once: Serial.begin(9600); lora.begin(115200); delay(1000);

lora.print(“mac join abp”); // Join your ABPdelay(5000); }

void loop() { int len = lora.available();if( len > 0 ) { lora.readBytes(dat, len); for(int x=0; x < len; x++) {Serial.print((char)dat[x]); } }

// put your main code here, to runrepeatedly: float sensor_volt; float RS_gas; // Get value of RS in a GAS floatratio; // Get ratio RS_GAS/RS_air int sensorValue = analogRead(A0); float R0 =2.10;

sensor_volt=(float)sensorValue/1024*5.0;RS_gas = (5.0-sensor_volt)/sensor_volt; // omit *RL

/*-Replace the name “R0” with the value ofR0 in the demo of First Test -*/ ratio = RS_gas/R0; // ratio = RS/R0/* ———————————————————————–*/

Serial.print(“sensor_volt = “);Serial.println(sensor_volt); Serial.print(“RS_ratio = “);Serial.println(RS_gas); Serial.print(“Rs/R0 = “); Serial.println(ratio);

Serial.print(“”);

sprintf(dat, “mac tx ucnf %d %04d”,TX_PORT, sensorValue); lora.print(dat);

delay(30000); }

作者:赖建宏

声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

我来说两句

(共0条评论,0人参与)

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号