“SX1268 433M LoRa HAT”的版本间的差异

来自Waveshare Wiki
跳转至: 导航搜索
(Replaced content with "{{SX1262 433M/470M/868M/915M LoRa HAT}}")
 
(未显示3个用户的23个中间版本)
第1行: 第1行:
<div class="tabber">
+
{{SX1262 433M/470M/868M/915M LoRa HAT}}
 
 
{{扩展板|colorscheme=blue
 
|name = SX1268-433M-LoRa-HAT
 
|img = [[File:SX1268-433M-LoRa-HAT-001.jpg|360px|alt=SX1268 433M LoRa HAT | link=http://{{SERVERNAME}}/shop/SX1268-433M-LoRa-HAT.htm]]
 
|category1=树莓派
 
|brand=waveshare
 
|feature =  无线通信
 
|interface1 = RPi
 
|interface2 = USB TO UART
 
|Product1 = {{LoRa-Related-Product}}
 
}}
 
 
 
<div class="tabbertab" title="说明">
 
==产品概述==
 
* 本产品是基于SX1268芯片,具有LoRa调制功能无线串口模块的树莓派扩展板<br \>
 
* 具有多级中继实现超远距离通信,低功耗唤醒通信、加密传输等优点<br \>
 
==产品特点==
 
* 支持全球免许可ISM 433MHz频段
 
* 支持空中唤醒,即超低功耗功能,适用于电池供电的应用方案
 
* 支持定点传输、广播传输、信道监听,多级中继用于超远距离通信
 
* 支持 RSSI 信号强度指示功能,用于评估信号质量、改善通信网络
 
* 支持 LBT 功能,在发送前监听信道环境噪声,可极大提高模块在恶劣环境下的通信成功率
 
* LoRa扩频技术,多达84信道可选
 
* 支持空中唤醒,在线配置,载波监听,自动中继,通信密钥,低功耗休眠
 
* 理想环境下通信距离可达5KM
 
==产品参数==
 
{| class="wikitable" style="margin: auto;text-align:center;"
 
|-
 
| rowspan=3 | 功耗
 
| 发射电流
 
|100mA(瞬时功耗)
 
|-
 
| 接收电流
 
| 11mA
 
|-
 
| 休眠电流
 
| 2uA(LoRa模组深度休眠)
 
|-
 
| colspan=2 | 最大发射功率
 
|22.0dBm(10、13、17、22dBm软件选择)
 
|-
 
| colspan=2 | 发射长度
 
| 240Byte(32、64、128、240Byte软件选择)
 
|-
 
| colspan=2 | 缓存容量
 
| 1000Byte
 
|-
 
| colspan=2 | 工作频段
 
| 410.125~493.125MHz
 
|-
 
| colspan=2 | 接收灵敏度
 
| -147dBm@0.3Kbps空中速率
 
|-
 
| colspan=2 | 空中速率
 
| 0.3K~62.5Kbps(可软件选择)
 
|-
 
| colspan=2 | 通信接口
 
| UART
 
|-
 
| colspan=2 | 参考距离
 
| 5KM(晴朗空旷,天线增益5dBi,天线高度2.5米,空中速率2.4kbps)
 
|-
 
| colspan=2 | 供电电压
 
| 5V
 
|-
 
| colspan=2 | 逻辑电平
 
| 3.3V
 
|-
 
| colspan=2 | 工作温度
 
| -40~85℃
 
|}
 
 
 
==硬件介绍==
 
 
 
[[File:SX1268-LoRa-HAT-002.jpg|600px|thumb| 实物标识图]]
 
{| class="wikitable" style="text-align:center;"
 
|-
 
! 序号 !! colspan=2 | 描述
 
|-
 
| 1 || colspan=2 |SX1268模组
 
|-
 
| 2 || colspan=2 | 74HC125V电平转换芯片
 
|-
 
| 3 || colspan=2 | CP2102 USB转UART芯片
 
|-
 
| 4 || colspan=2 | RPi接口
 
|-
 
| 5 || colspan=2 | USB TO UART接口
 
|-
 
| 6 || colspan=2 | UART接口方便外接其它MCU
 
|-
 
| 7 || colspan=2 | SMA天线接口
 
|-
 
| 8 || colspan=2 | IPEX天线接口
 
|-
 
| rowspan=3 | 9
 
| rowspan=3 | 指示灯
 
| style="text-align:left;" | RXD/TXD:串口指示灯
 
|-
 
| style="text-align:left;" | AUX:辅助指示灯
 
|-
 
| style="text-align:left;" | PWR:电源指示灯
 
|-
 
| rowspan=3 | 10
 
| rowspan=3  style="background-color:#DC143C;" | UART选择跳帽
 
| style="text-align:left; background-color:#DC143C;" | A:USB转串口控制LoRa
 
|-
 
| style="text-align:left; background-color:#DC143C;" | B:树莓派控制LoRa
 
|-
 
| style="text-align:left; background-color:#DC143C;"| C:USB转串口访问树莓派
 
|-
 
| rowspan=4 | 11
 
| rowspan=4  style="text-align:left; background-color:#00FF00;" | LoRa模式选择跳线
 
| style="text-align:left; background-color:#00FF00;" |模式0: M0短接,M1短接:传输模式
 
|-
 
| style="text-align:left; background-color:#00FF00;" | 模式1:M0不接,M1短接:WOR模式
 
|-
 
| style="text-align:left; background-color:#00FF00;" | 模式2:M0短接,M1不接:配置模式
 
|-
 
| style="text-align:left; background-color:#00FF00;" | 模式3:M0不接,M1不接:深度休眠模式
 
|}
 
1、将M1、M0进行高低电平组合,确定工作模式,<span style="color:red;">'''其中M1、M0不接跳帽时为高电平'''</span>,切换工作模式后,若模块空闲,则进入新的工作模式,否则将处理完当前发射接收后再进入新工作模式
 
<br \>2、模式0,用户串口输入数据后,模块启动无线发射,空闲时,无线接收功能打开,接收到数据串口TXD输出
 
<br \>3、模式1,当定义为发射时,发射前自动增加一定时间唤醒码,接收等同于模式0
 
<br \>4、模式2,无线收发功能关闭,用户可以参造寄存器配置设置寄存器
 
<br \>5、模式3,无线收发关闭,进入深度休眠模式,当进入其他工作模式,模块重新配置参数
 
 
 
==寄存器配置==
 
<span style="color: red;">配置模式('''模式2:M0短接,M1不接''')下,支持的指令列表如下(设置时,只支持9600,8N1格式),'''以下数值为16进制'''</span>
 
{| class="wikitable" style="margin: auto;text-align:center;"
 
|-
 
! 指令功能
 
! colspan=6 | 详细说明
 
|-
 
| rowspan=11 | 设置寄存器
 
|-
 
| colspan=6 style="text-align:left; " | 指令格式:C0+起始地址+长度+参数
 
|-
 
| colspan=6 style="text-align:left;" |响应格式:C1+起始地址+长度+参数
 
|-
 
| colspan=6 style="text-align:left; " | 例1:配置信道为0x11
 
|-
 
| colspan=2|
 
| 指令头
 
| 起始地址
 
| 长度
 
| 参数
 
|-
 
| colspan=2| 发送:
 
| C0
 
| 05
 
| 01
 
| 11
 
|-
 
| colspan=2|  返回:
 
| C1
 
| 05
 
| 01
 
| 11
 
|-
 
| colspan=6 style="text-align:left; " | 例2:同时配置模块地址(0x1234)、网络地址(0x00)、串口(9600 8N1)、空速(1.2K)
 
|-
 
| colspan=2|
 
| 指令头
 
| 起始地址
 
|长度
 
|参数
 
|-
 
| colspan=2| 发送:
 
|C0
 
|00
 
|04
 
|12 34 00 61
 
|-
 
| colspan=2| 返回:
 
|C1
 
|00
 
|04
 
|12 34 00 61
 
|-
 
| rowspan=11 | 读取寄存器
 
|-
 
|colspan=6 style="text-align:left;"| 指令格式:C1+起始地址+长度
 
|-
 
|colspan=6 style="text-align:left;"|响应格式:C1+起始地址+长度+参数
 
|-
 
|colspan=6 style="text-align:left;"|例1:读取信道
 
|-
 
| colspan=2|
 
|指令头
 
|起始地址
 
|长度
 
|参数
 
|-
 
| colspan=2| 发送:
 
|C1
 
|05
 
|01
 
|
 
|-
 
| colspan=2| 返回:
 
|C1
 
|05
 
|01
 
|11
 
|-
 
| colspan=6 style="text-align:left;"| 例2:同时读取模块地址、网络地址、串口、空速
 
|-
 
| colspan=2|
 
|指令头
 
|起始地址
 
|长度
 
|参数
 
|-
 
| colspan=2| 发送:
 
|C0
 
|00
 
|04
 
|
 
|-
 
| colspan=2| 返回:
 
|C1
 
|00
 
|04
 
|12 34 00 61
 
|-
 
| rowspan=10 | 设置临时寄存器
 
|colspan=6 style="text-align:left;"|指令格式:C2+起始地址+长度+参数
 
|-
 
|colspan=6 style="text-align:left;"|响应格式:C1+起始地址+长度+参数
 
|-
 
|colspan=6 style="text-align:left;"|例1:配置信道为0x11
 
|-
 
| colspan=2|
 
|指令头
 
|起始地址
 
|长度
 
|参数
 
|-
 
| colspan=2| 发送:
 
|C2
 
|05
 
|01
 
|11
 
|-
 
| colspan=2| 返回:
 
|C1
 
|05
 
|01
 
|11
 
|-
 
|-
 
| colspan=6 style="text-align:left; " | 例2:同时配置模块地址(0x1234)、网络地址(0x00)、串口(9600 8N1)、空速(1.2K)
 
|-
 
| colspan=2|
 
| 指令头
 
| 起始地址
 
|长度
 
|参数
 
|-
 
| colspan=2| 发送:
 
|C2
 
|00
 
|04
 
|12 34 00 61
 
|-
 
| colspan=2| 返回:
 
|C1
 
|00
 
|04
 
|12 34 00 61
 
|-
 
| rowspan=11 | 无线配置
 
|-
 
| colspan=6 style="text-align:left; " | 指令格式:CF+CF+C0+起始地址+长度+参数
 
|-
 
| colspan=6 style="text-align:left;" |响应格式:CF+CF+C1+起始地址+长度+参数
 
|-
 
| colspan=6 style="text-align:left; " | 例1:配置信道为0x11
 
|-
 
|
 
| 无线指令头
 
|指令头
 
| 起始地址
 
| 长度
 
| 参数
 
|-
 
| 发送:
 
| CF CF
 
|C0
 
| 05
 
| 01
 
| 11
 
|-
 
| 返回:
 
|CF CF
 
| C1
 
| 05
 
| 01
 
| 11
 
|-
 
| colspan=6 style="text-align:left; " | 例2:同时配置模块地址(0x1234)、网络地址(0x00)、串口(9600 8N1)、空速(1.2K)
 
|-
 
|
 
|无线指令头
 
| 指令头
 
| 起始地址
 
|长度
 
|参数
 
|-
 
|发送:
 
|CF CF
 
|C0
 
|00
 
|04
 
|12 34 00 61
 
|-
 
|返回:
 
|CF CF
 
|C1
 
|00
 
|04
 
|12 34 00 61
 
|-
 
| rowspan=2|格式错误
 
|colspan=6| 格式错误响应
 
|-
 
|colspan=6| FF FF FF
 
|}
 
<span style="color: red;">'''注意:'''</span>
 
# 使用无线配置时,应先配置两个模块地址、NETID、空速和密钥,使之参数相同,再使用CFCF指令格式进行无线配置。例如:模块A地址、NETID、空速和密钥为1、1、2.4Kbps和1,模块B地址、空速和密钥为2、2、62.5kbps和2,若模块A要无线配置模块B,须先将模块A的地址、NETID、空速和密钥设置为模块B的参数,然后再使用CF CF指令无线配置模块B。
 
# 设置临时寄存器后,LoRa模组将使用临时寄存器的值工作,掉电重启后,临时寄存器的值丢失, LoRa模块会重新设置寄存器。设置值为上次使用C1指令格式配置的值
 
===寄存器描述===
 
{|class="wikitable" style="text-align:center;"
 
! 寄存器地址!!读写!!名称!! colspan=4 |描述!! 备注
 
|-
 
|00H
 
|读/写
 
|ADDH
 
| colspan=4 |ADDH(默认0)
 
|rowspan=2 style="text-align:left;"|模块地址高字节和低字节,<br \>注意:当模块地址等于FFFF时,可作为广播和监听地址,此时模块将不再进行地址过滤
 
|-
 
|01H
 
|读/写
 
|ADDL
 
|colspan=4|ADDL(默认0)
 
|-
 
|02H
 
|读/写
 
|NETID
 
|colspan=4|NETID(默认0)
 
|style="text-align:left;"  |网络地址,用于区分网络,相互通信时,应设置为相同
 
|-
 
|rowspan=23|03H
 
|rowspan=23|读/写
 
|rowspan=23|REG0
 
|style="background-color:#1E90FF;"|7
 
|style="background-color:#1E90FF;"|6
 
|style="background-color:#1E90FF;"|5
 
|style="background-color:#1E90FF;"|UART串口速率(bps)
 
|rowspan=9 style="text-align:left;"| 相互通信的两个模块,串口波特率可以不同,校验方式也可以不同;<br \>当连续发射较大数据包时,用户需要考虑波特率相同带来的数据阻塞,甚至可能丢失;一般建议通信双方波特率相同
 
|-
 
|0
 
|0
 
|0
 
|串口波特率为1200
 
|-
 
|0
 
|0
 
|1
 
|串口波特率为2400
 
|-
 
|0
 
|1
 
|0
 
|串口波特率为4800
 
|-
 
|0
 
|1
 
|1
 
|<span style="color:red;">串波特率为9600('''默认''')</span>
 
|-
 
|1
 
|0
 
|0
 
|串口波特率为19200
 
|-
 
|1
 
|0
 
|1
 
|串口波特率为38400
 
|-
 
|1
 
|1
 
|0
 
|串口波特率为57600
 
|-
 
|1
 
|1
 
|1
 
|串口波特率为115200
 
|-
 
|style="background-color:#1E90FF;"|4
 
|style="background-color:#1E90FF;"|3
 
|style="background-color:#1E90FF;" colspan=2|串口校验位
 
|rowspan=5|通信双方串口模式可以不同
 
|-
 
|0
 
|0
 
| colspan=2|<span style="color:red;">'''8N1(默认)'''</span>
 
|-
 
|0
 
|1
 
| colspan=2|8O1
 
|-
 
|1
 
|0
 
| colspan=2|8E1
 
|-
 
|0
 
|1
 
| colspan=2|8N1等于00
 
|-
 
|style="background-color:#1E90FF;"|2
 
|style="background-color:#1E90FF;"|1
 
|style="background-color:#1E90FF;"|0
 
|style="background-color:#1E90FF;"|无线空中速率(bps)
 
|rowspan=9 style="text-align:left;"|通信双方空中速率必须相同;<br \>空中速率越高,延迟越小,传输距离越短。
 
|-
 
|0
 
|0
 
|0
 
|空中速率0.3
 
|-
 
|0
 
|0
 
|1
 
|空中速率1.2
 
|-
 
|0
 
|1
 
|0
 
|<span style="color:red;">'''空中速率2.4(默认)'''</span>
 
|-
 
|0
 
|1
 
|1
 
|空中速率4.8K
 
|-
 
|1
 
|0
 
|0
 
|空中速率9.6K
 
|-
 
|1
 
|0
 
|1
 
|空中速率19.2K
 
|-
 
|1
 
|1
 
|0
 
|空中速率38.4K
 
|-
 
|1
 
|1
 
|1
 
|空中速率62.5K
 
|-
 
|rowspan=14|04H
 
|rowspan=14|读/写
 
|rowspan=14|REG0
 
|style="background-color:#1E90FF;"|7
 
|style="background-color:#1E90FF;"|6
 
|colspan=2 style="background-color:#1E90FF;"|分包设定
 
|rowspan=5 style="text-align:left;"| 用户发送数据小于分包长度,接收端串口输出呈现为不间断连续输出;<br \>用户发送数据大于分包长度,接收端串口会分包输出。
 
|-
 
|0
 
|0
 
|colspan=2|<span style="color:red;">'''240字节(默认)'''</span>
 
|-
 
|0
 
|1
 
|colspan=2|128字节
 
|-
 
|1
 
|0
 
|colspan=2|64字节
 
|-
 
|1
 
|1
 
|colspan=2|32字节
 
|-
 
|style="background-color:#1E90FF;"|5
 
|style="background-color:#1E90FF;" colspan=3|环境噪音使能
 
|rowspan=3 style="text-align:left;"|启用后,可在传输模式或 WOR 发送模式发送指令 C0 C1 C2 C3读取寄存器;<br \>寄存器 0x00 :当前环境噪声 RSSI;<br \> 寄存器 0X01 :上一次接收数据时的 RSSI (当前信道噪声为:dBm =-RSSI/2);<br \>指令格式:C0 C1 C2 C3+起始地址+读取长度; <br \>返回格式:C1 + 地址+读取长度+读取有效值;如: 发送 C0 C1 C2 C3 00 01 返回 C1 00 01 RSSI(地址只能从 00 开始)
 
|-
 
|0
 
| colspan=3|<span style="color:red;">'''禁用(默认)'''</span>
 
|-
 
|1
 
| colspan=3|启用
 
|-
 
|style="background-color:#1E90FF;"|4
 
|style="background-color:#1E90FF;"|3
 
|style="background-color:#1E90FF;"|2
 
|style="background-color:#1E90FF;"|保留
 
|style="text-align:left;"|
 
|-
 
|style="background-color:#1E90FF;"|1
 
|style="background-color:#1E90FF;"|0
 
|colspan=2 style="background-color:#1E90FF;"|发射功率
 
| rowspan=5 style="text-align:left;"|功率和电流是非线性关系,最大功率时,电源效率最高; 电流不会随功率降低而同比例降低
 
|-
 
|0
 
|0
 
|colspan=2|<span style="color:red;">'''22dBm(默认)'''</span>
 
|-
 
|0
 
|1
 
|colspan=2|17dBm
 
|-
 
|1
 
|0
 
|colspan=2|13dBm
 
|-
 
|1
 
|1
 
|colspan=2|10dBm
 
|-
 
|05H
 
|读/写
 
|REG2
 
|colspan=4|信道控制(CH)0-83分别代表总共84个信道
 
|实际频率= 410.125 + CH *1MHz,默认433.125MHz
 
|-
 
|rowspan=24|06H
 
|rowspan=24|读/写
 
|rowspan=24|REG3
 
|style="background-color:#1E90FF;"|7
 
|colspan=3 style="background-color:#1E90FF;"|启用RSSI字节
 
|rowspan=3 style="text-align:left;"| 启用后,模块收到无线数据,通过串口 TXD 输 出后,将跟随一个 RSSI 强度字节。
 
|-
 
|0
 
|colspan=3|<span style="color:red;">'''禁用(默认)'''</span>
 
|-
 
|1
 
|colspan=3|启用
 
|-
 
|style="background-color:#1E90FF;"|6
 
|style="background-color:#1E90FF;" colspan=3|传输方式
 
|rowspan=3 style="text-align:left;"|定点传输时,模块会将串口数据的前三个字节 识别为:地址高+地址低+信道,并将其作为无线发射目标。
 
|-
 
|0
 
| colspan=3|<span style="color:red;">'''透明传输(默认)'''</span>
 
|-
 
|1
 
| colspan=3|定点传输
 
|-
 
|style="background-color:#1E90FF;"|5
 
|colspan=3 style="background-color:#1E90FF;"|中继功能
 
|rowspan=3 style="text-align:left;"| 中继功能启用后,如果目标地址不是模块自身,模块将启动一次转发; 为了防止数据回传,建议和定点模式配合使 用;即:目标地址和源地址不同
 
|-
 
|0
 
|colspan=3|<span style="color:red">'''禁用中继功能(默认)'''</span>
 
|-
 
|1
 
|colspan=3|启用中继功能
 
|-
 
|style="background-color:#1E90FF;"|4
 
|colspan=3 style="background-color:#1E90FF;"|LBT使能
 
| rowspan=3 style="text-align:left;"|启用后,无线数据发射前会进行监听,可以在 一定程度上避开干扰,但可能带来数据延迟; LBT 最大停留时间 2 秒,达到两秒会强制发出
 
|-
 
|0
 
|colspan=3|<span style="color:red;">'''禁用(默认)'''</span>
 
|-
 
|1
 
|colspan=3|启用
 
|-
 
|style="background-color:#1E90FF;"|3
 
|colspan=3 style="background-color:#1E90FF;"|WOR模式收发控制
 
|rowspan=3 style="text-align:left;"| 仅针对模式 1 有效; WOR 接收方收到无线数据并通过串口输出后, 会等待 1000ms 后才再次进入 WOR,用户可以在 此期间输入串口数据并通过无线返回; 每个串口字节都会刷新 1000ms 时间; 用户必须在 1000ms 内发起第一个字节。
 
|-
 
|0
 
|colspan=3|<span style="color:red">'''WOR接收(默认)'''</span>
 
|-
 
|1
 
|colspan=3|WOR发射方。模块无法发射数据,工作再WOR监听模式,可以节省大量功耗
 
|-
 
|style="background-color:#1E90FF;"|2
 
|style="background-color:#1E90FF;"|1
 
|style="background-color:#1E90FF;"|0
 
|style="background-color:#1E90FF;"|WOR周期
 
|rowspan=9 style="text-align:left;"|仅针对模式 1 有效; 周期 T= (1+WOR)*500ms,最大 4000ms,最 小为 500ms; WOR 监听间隔周期时间越长,平均功耗越低, 但数据延迟越大;<span style="color:red;">收发双方必须一致(非常重要)</span>
 
|-
 
|0
 
|0
 
|0
 
|500ms
 
|-
 
|0
 
|0
 
|1
 
|1000ms
 
|-
 
|0
 
|1
 
|0
 
|1500ms
 
|-
 
|0
 
|1
 
|1
 
|2000ms
 
|-
 
|1
 
|0
 
|0
 
|2500ms
 
|-
 
|1
 
|0
 
|1
 
|3000ms
 
|-
 
|1
 
|1
 
|0
 
|3500ms
 
|-
 
|1
 
|1
 
|1
 
|4000ms
 
|-
 
|07H
 
|写
 
|CRYPT_H
 
|colspan=4| 密钥高字节(默认0)
 
|style="text-align:left;" rowspan=2|只写,读取返回 0; 用于加密,避免被同类模块截获空中无线数据; 模块内部将使用这两个字节作为计算因子对空 中无线信号进行变换加密处理
 
|-
 
|08H
 
|写
 
|CRYPT_L
 
|colspan=4|密钥低字节(默认0)
 
|-
 
|80H~86H
 
|读
 
|PID
 
|colspan=4 |产品信息7字节
 
|产品信息7个字节
 
|}
 
 
 
==串口调试==
 
# 准备两个SX1268 LoRa HAT 模块(以下统称Lora模块),两根Micro USB线,装配SMA天线,跳帽置于A上,M0和M1连接GND
 
# WINDOWS PC上安装CP2102驱动,两个Lora模块使用Micro USB连接至PC
 
# 打开PC设备管理器,查找CP2102对应的两个COM口,使用SSCOM串口软件分别连接两个Lora模块,波特率都设置为9600
 
# 其中一个SSCOM串口软件的输入栏输入数据,点击发送按钮,在另一个SSCOM串口软件显示栏可以看到LoRa模块收到的数据。
 
[[File:SX1268-LoRa-HAT-003.png|center|800px|LoRa与PC连接]]<br \>
 
[[File:SX1268-LoRa-HAT-004.png|center|800px|串口收发测试]]
 
 
 
==接入树莓派使用==
 
===下载示例程序===
 
[[File:SX1268-LoRa-HAT-005.png|100px|thumb| 下载示例程序]]
 
# 使用[http://www.waveshare.net/w/upload/5/56/Putty.zip putty]等软件登录RaspberryPi 3B+或Zero W,[http://www.waveshare.net/study/portal.php?mod=view&aid=741 不熟悉SSH或Serial登录用户可点击我参考]
 
# 在RaspberryPi 3B+控制台界面下载示例程序,输入下面命令:
 
mkdir -p ~/RaspberryPi
 
wget -P ~/RaspberryPi/ http://www.waveshare.net/w/upload/2/2b/SX1268_LoRa_HAT_Code.7z
 
sudo apt-get install p7zip
 
cd ~/RaspberryPi/
 
p7zip --uncompress SX1268_LoRa_HAT_Code.7z
 
===安装函数库,打开树莓派SERIAL串口===
 
需要安装必要的函数库(python库),否则以下的示例程序可能无法正常工作。安装方法详见:<span style="color:red;">(如果是新系统请按照如下进行操作,若已经安装好以下的库可跳过)</span>
 
<br \>'''安装python库:'''
 
sudo apt-get install python-pip
 
sudo pip install RPi.GPIO
 
sudo apt-get install python-smbus
 
sudo apt-get install python-serial
 
'''打开树莓派SERIAL串口'''
 
<br \>若用户使用SSH登录树莓派终端,[http://www.waveshare.net/study/portal.php?mod=view&aid=606 请点击我参阅使能树莓派SERIAL串口]
 
===透传通信===
 
<div><ul>
 
<li style="display: inline-block;"> [[File:SX1268-LoRa-HAT-010.png|thumb|none|500px|透传广播通信示意图]] </li>
 
<li style="display: inline-block;"> [[File:SX1268-LoRa-HAT-009.png|thumb|none|500px|透传点对点通信示意图]] </li>
 
</ul>
 
</div>
 
* 准备RaspberryPi 3B+,LoRa模块直接接入Pi 3B+的40Pin口,跳帽置于B,<span style="color:red;">M0和M1由Pi 3B+的IO控制,不再使用跳帽</span>
 
* 另一个LoRa模块通过Micro USB连接至PC,跳帽置于A,M1和M0连接GND,打开SSCOM串口软件连接LoRa模块
 
[[File:SX1268-LoRa-HAT-006.png|center|800px|透传通信实物连接图]]
 
* 进入RaspberryPi/transparent目录,输入下面命令,连接Pi 3B+的LoRa模块约两秒广播一次数据,连接PC的LoRa模块收到并打印数据。同时,用户也可以在SSCOM串口软件输入并发送数据,Pi 3B+收到后打印数据
 
cd ~/RaspberryPi/RaspberryPi/transparent
 
sudo python transparent.py BROADCAST_AND_MONITOR
 
[[File:SX1268-LoRa-HAT-007.png|center|1000px|透传广播通信]]
 
* 用户可以输入sudo python3 transplant.py P2P进行点对点的通信
 
sudo python transparent.py P2P
 
[[File:SX1268-LoRa-HAT-008.png|center|1000px|透传点对点通信]]
 
 
 
===中继通信===
 
中继通信是为实现超远距离通信一种方法,将LoRa模块设置成中继模式,中继模式的LoRa模块地址寄存器只作为NETID转发配对,不再有主动收发功能,也无法低功耗操作
 
<br \><span style="color:red;">注意:实现中继功能'''至少需要三个LoRa模块'''</span>
 
[[File:SX1268-LoRa-HAT-011.png|center|900px|中继通信示意图]]
 
 
 
* 将当前三个LoRa模块假设为LoRa模块A,LoRa模块B,LoRa模块C。
 
* 使用SSCOM串口软件(9600 8N1)设置LoRa模块B为中继模式,ADDH寄存器设置为0x01,ADDL寄存器设置为0x02,REG3寄存器设置为0x23,其它寄存器参数不变,则设置指令为'''C1 00 09 01 02 00 62 00 12 23 00 00''',设置时将M1跳帽去掉,M0跳帽连接GND。设置完成后,将M1、M0连接GND。
 
* 使用SSCOM串口软件(9600 8N1)设置LoRa模块C为收发节点,ADDH寄存器设置为0x03,ADDL寄存器为0x04,NETID寄存器设置为0x02,其它寄存器参数不变,则设置指令为'''C1 00 09 00 00 02 62 00 12 03 00 00''',<span style="color:red;">设置时将M1跳帽去掉,M0跳帽连接GND。设置完成后,将M1、M0连接GND,打开串口软件。</span>
 
[[File:SX1268-LoRa-HAT-012.png|center|800px]]
 
[[File:SX1268-LoRa-HAT-013.png|center|1200px]]
 
* LoRa模块A接入Pi 3B+,'''拔掉M0、M1跳帽''',进入/RaspberryPi/relay目录,执行下面命令,LoRa模块A约2秒会重复自动发送数据,LoRa模块C收到数据会从串口打印数据,而中继LoRa模块B不会从串口打印任何数据,输入下面命令:
 
cd ~/RaspberryPi/RaspberryPi/relay
 
sudo python relay.py
 
[[File:SX1268-LoRa-HAT-014.png|center|1200px]]
 
===唤醒通信===
 
唤醒通信是一种低功耗操作的通信方式,数据接收会延迟,但<span style="color:red;">模块的功耗小,'''可用于电池供电的应用'''</span>
 
* 使用串口软件SSCOM设置LoRa模块为WOR接收模式,<span style="color:red;">'''设置时将M1跳帽去掉,M0跳帽连接GND。设置完成后M1接GND,M0不接'''</span>
 
[[File:SX1268-LoRa-HAT-015.png|1200px|]]
 
* LoRa模块B接入Pi 3B+,进入目录/RaspberryPi/wor,输入下面命令:
 
cd ~/RaspberryPi/RaspberryPi/wor
 
sudo python wor.py
 
* Xshell上显示已经发送消息时,SSCOM软件会延迟一段时间才能接收到
 
[[File:SX1268-LoRa-HAT-016.png|center|1200px]]
 
 
 
==接入STM32使用==
 
本例程使用的开发板 Open103C,芯片为STM32F103CBT6,程序是基于HAL库
 
===硬件连接===
 
跳帽连接B,M0、M1跳帽移除改用STM32F103C的GPIO使用,如下图所示<br \>
 
[[File:SX1268-LoRa-HAT-017.jpg|center|500px]]<br \>
 
图中GPIO连接接线图为
 
{| class="wikitable" style="margin: auto;text-align:center;"
 
|-
 
!  SX1268 LoRa HAT !!  STM32F103C
 
|-
 
| 5V || 5V
 
|-
 
| GND || GND
 
|-
 
| RXD ||  PA10
 
|-
 
| TXD || PA9
 
|-
 
| M1 ||  PB15
 
|-
 
| M0 ||  PB14
 
|}
 
 
 
===例程演示===
 
* 连接电脑USB的LoRa模块的设置同以上三个例程相同。
 
* 打开Keil工程文档,在main.c文件第75行到77行使用不同的定义使用不同的通信方式<br \>
 
#define TRASNSPARENT
 
//#define RELAY
 
//#define WOR
 
* 选择好上面的通讯方式按F7编译,按F8下载到STM32。
 
 
 
==== 透传通信====
 
[[File:SX1268-LoRa-HAT-018.png|center|500px]]
 
====中继通讯====
 
[[File:SX1268-LoRa-HAT-019.png|center|500px]]
 
====唤醒通信(WOR模式)====
 
图中Open103C发送数据时LED1同发送模块的LoRa的LED亮起,但PC端上接收延迟约2S左右才收到数据。
 
[[File:SX1268-LoRa-HAT-020.png|center|600px]]
 
</div>
 
 
 
<div class="tabbertab" title="资料">
 
 
 
 
 
 
 
===文档===
 
* [http://www.waveshare.net/w/upload/a/af/SX1268_LoRa_HAT_SchDoc.pdf 原理图]
 
===程序===
 
* [http://www.waveshare.net/w/upload/2/2b/SX1268_LoRa_HAT_Code.7z 示例程序]
 
 
 
===软件===
 
* [http://www.waveshare.net/w/upload/5/5f/Sscom.7z 串口调试助手]
 
* [http://www.waveshare.net/w/upload/6/62/CP210x_USB_TO_UART.zip CP2102驱动]
 
* [http://www.waveshare.net/w/upload/5/56/Putty.zip putty]
 
 
 
===数据手册===
 
* [http://www.waveshare.net/w/upload/c/c4/SX1268_V1.0.pdf SX1268]
 
 
 
 
 
<br /><big>批量下载教程——请戳<big><big><big>☛</big></big></big></big>[[File:download-icon.png|link=批量下载教程]]
 
 
 
<!--{{Join_us}}-->
 
</div>
 
<div class="tabbertab" title="FAQ"><br />
 
{{FAQ| SX1268 433M LoRa HAT,SX262 868M LoRa HAT,SX262 915M LoRa HAT可以国内使用吗?|
 
国内使用SX1268 433M LoRa HAT,SX262 868M LoRa HAT,SX262 915M LoRa HAT只能是用来开发产品,不能大面积覆盖区域网络,国内使用SX1268 470M LoRa HAT覆盖区域网络|||}}
 
</div>
 
<div class="tabbertab" title="售后"><br />{{Service19}}</div>
 

2021年11月29日 (一) 09:35的最新版本

SX1262-868M-LoRa-HAT
SX1268 433M LoRa HAT
{{{name2}}}
{{{name3}}}
板载接口
RPi USB TO UART

产品概述

  • 本产品是基于SX1268/SX1262芯片,具有LoRa调制功能无线串口模块的树莓派扩展板
  • 具有多级中继实现超远距离通信,低功耗唤醒通信、加密传输等优点
  • 本产品不支持LoRaWAN

产品特点

  • 支持全球免许可ISM 433/470/868/915MHz频段频段
  • 支持空中唤醒,即超低功耗功能,适用于电池供电的应用方案
  • 支持定点传输、广播传输、信道监听,多级中继用于超远距离通信
  • 支持 RSSI 信号强度指示功能,用于评估信号质量、改善通信网络
  • 支持 LBT 功能,在发送前监听信道环境噪声,可极大提高模块在恶劣环境下的通信成功率
  • LoRa扩频技术,多达84信道/81信道(SX1268,SX1262)可选
  • 支持空中唤醒,在线配置,载波监听,自动中继,通信密钥,低功耗休眠
  • 理想环境下通信距离可达5KM

产品参数

功耗 发射电流 100mA(瞬时功耗)
接收电流 11mA
休眠电流 2uA(LoRa模组深度休眠)
最大发射功率 22.0dBm(10、13、17、22dBm软件选择)
发射长度 240Byte(32、64、128、240Byte软件选择)
缓存容量 1000Byte
工作频段 410.125~493.125MHz或850.125~930.125MHz
接收灵敏度 -147dBm@0.3Kbps空中速率
空中速率 0.3K~62.5Kbps(可软件选择)
通信接口 UART
参考距离 5KM(晴朗空旷,天线增益5dBi,天线高度2.5米,空中速率2.4kbps)
供电电压 5V
逻辑电平 3.3V
工作温度 -40~85℃

硬件介绍

实物标识图
序号 描述
1 SX1268/SX1262模组
2 74HC125V电平转换芯片
3 CP2102 USB转UART芯片
4 RPi接口
5 USB TO UART接口
6 UART接口方便外接其它MCU
7 SMA天线接口
8 IPEX天线接口
9 指示灯 RXD/TXD:串口指示灯
AUX:辅助指示灯
PWR:电源指示灯
10 UART选择跳帽 A:USB转串口控制LoRa
B:树莓派控制LoRa
C:USB转串口访问树莓派
11 LoRa模式选择跳线 模式0: M0短接,M1短接:传输模式
模式1:M0不接,M1短接:WOR模式
模式2:M0短接,M1不接:配置模式
模式3:M0不接,M1不接:深度休眠模式

1、将M1、M0进行高低电平组合,确定工作模式,其中M1、M0不接跳帽时为高电平,切换工作模式后,若模块空闲,则进入新的工作模式,否则将处理完当前发射接收后再进入新工作模式
2、模式0,用户串口输入数据后,模块启动无线发射,空闲时,无线接收功能打开,接收到数据串口TXD输出
3、模式1,当定义为发射时,发射前自动增加一定时间唤醒码,接收等同于模式0
4、模式2,无线收发功能关闭,用户可以参造寄存器配置设置寄存器
5、模式3,无线收发关闭,进入深度休眠模式,当进入其他工作模式,模块重新配置参数

LoRa和LoRaWAN

什么是LoRa?

Semtech 的 LoRa 是一种长距离、低功耗的物联网 (IoT) 无线平台,一般情况下泛指使用LoRa技术的射频芯片.主要特点如下

  • LoRa(long range 的缩写)采用的扩频调制技术源于啁啾扩频 (CSS) 技术,是远距离无线传输技术和LPWAN通信技术中的一种.目前,LoRa 主要在ISM频段运行主要包括433、868、915 MHz等
  • LoRa技术融合了数字扩频、数字信号处理和前向纠错编码等技术使得在长距离通信性能层面大幅度提高,LoRa的链路预算优于其他任何标准化的通信技术,链路预算是指给定的环境中决定距离的主要因素
  • LoRa射频芯片主要有 SX127X系列,SX126X系列,SX130X系列,其中SX127X,SX126X系列用于LoRa节点,SX130X用于LoRa网关,详情可参考Semtech的产品列表

什么是LoRaWAN?

  • LoRaWAN 是一种建立在 LoRa 无线电调制技术之上的低功耗广域网开放协议。旨在将电池供电的“事物”无线连接到区域、国家或全球网络中的互联网,并针对关键的物联网 (IoT) 要求,例如双向定向通信、端到端安全、移动性和本地化服务。其中节点无线连接到互联网有入网认证,相当于建立节点和服务器间的加密通信信道,入网详情参考[ 文档]和源码,LoRaWAN协议层次下图所示。
    • MAC层中的Class A/B/C 三类节点设备基本覆盖了物联网所有的应用场景,三者之间不同点在于节点收发的时隙不同
    • Modulation层中EU868,AS430等表明不同国家使用频段参数不同,地区参数请点击参考链接

SX1262-LoRa-HAT-021.png

  • 实现LoRaWAN网络覆盖城市或其它区域需要由节点(LoRa节点射频芯片)、网关(或称基站,LoRa网关射频芯片)、Server和云四部分组成,如下图所示
    • DEVICE(节点设备)需先发起入网请求数据包到GATEWAY(网关)再到服务器,认证通过后才可以正常和服务器收发应用数据
    • GATEWAY(网关)可通过有线网络,3/4/5G无线网络与服务器进行通信
    • 服务器端主要运营商有TTN等,自行搭建云端服务请参考lorawan-stackchirpstack

SX1268-LoRa-HAT-021.png

应用

LoRa 器件和网络(如 LoRaWAN)使得智能物联网应用能够帮助解决地球面临的能源管理、自然资源减少、污染控制、基础设施效率、防灾等艰巨挑战。Semtech 的 LoRa 器件已在智慧城市、家居和建筑、社区、计量、供应链和物流、农业等领域实现了数百个成功应用案例。LoRa 网络已覆盖 100 多个国家/地区的数亿台器件,致力于打造一个更智慧的地球。


Windows

硬件连接和测试

  1. 准备两个SX126x LoRa HAT 模块(以下统称Lora模块),两根Micro USB线,装配SMA天线,跳帽置于A上,M0和M1连接GND
  2. WINDOWS PC上安装CP2102驱动,两个Lora模块使用Micro USB连接至PC
  3. 打开PC设备管理器,查找CP2102对应的两个COM口,使用SSCOM串口软件分别连接两个Lora模块,波特率都设置为9600
  4. 其中一个SSCOM串口软件的输入栏输入数据,点击发送按钮,在另一个SSCOM串口软件显示栏可以看到LoRa模块收到的数据。

PC终端

本测试使用Windows PC连接LoRa HAT,跳冒设置按出厂位置不改变
1. Windows安装python3,然后在启动栏输入cmd搜索并打开Windows终端
SX1268-433M-LoRa-HAT-111.jpg
2. 把python3的路径输入终端,一般默认地址如下图所示,注意检查用户自己的python3路径,安装pyserial

path=%path%;C:\Users\zhongshaohua\AppData\Local\Programs\Python\Python37\Scripts\
path=%path%;C:\Users\zhongshaohua\AppData\Local\Programs\Python\Python37\
pip3 install pyserial

SX1268-433M-LoRa-HAT-112.jpg
3. 使用上位机软件设置LoRa HAT,设置时拔掉M1跳冒,设置完成后接入M1跳冒并关闭上位机串口,设置参数如下
SX1268-433M-LoRa-HAT-113.jpg
4. 把示例程序解压到桌面,打开main.py文件修改COM口,然后再运行
SX1268-433M-LoRa-HAT-114.jpg

Raspberry Pi

本章节示例演示1使用两个LoRa HAT分别接入两个树莓派进行收发测试,示例演示2使用3个LoRa HAT进行中继通信收发测试

硬件连接,安装库,使能树莓派串口,下载示例程序

等待树莓派开机后再接入LoRa HAT,跳冒按照如下设置
SX1268-433M-LoRa-HAT-006.jpg
逐条输入下面命令,第一条指令使能树莓派串口

#2021.10.30后的系统不再需要安装serial库
#sudo apt install python-serial
sudo raspi-config
cd Documents
wget https://www.waveshare.net/w/upload/6/68/SX126X_LoRa_HAT_Code.zip
unzip SX126X_LoRa_HAT_Code.zip

打开树莓派SERIAL串口
若用户使用SSH登录树莓派终端,请点击我参阅使能树莓派SERIAL串口
L76X GPS Module rpi serial.png

例程演示1

  • 执行下面命令后,节点接收其它节点发送的数据时自动打印到终端,当节点需要发送数据给其它节点时候,按下键盘i,然后按提示输入输入即可,如下图所示
cd ~/Documents/sx126x_lora_hat/RaspberryPi/python/
sudo python3 main.py


例程演示2

中继通信是为实现超远距离通信一种方法,将LoRa模块设置成中继模式,中继模式的LoRa模块地址寄存器只作为NETID转发配对,不再有主动收发功能,也无法低功耗操作
注意:实现中继功能至少需要三个LoRa模块 SX1268-LoRa-HAT-011.jpg

  • 将三个LoRa模块假设为LoRa模块A,LoRa模块B,LoRa模块C。
  • LoRa模块A直接接入树莓派, LoR模块B和LoRa模块C使用Windows端上位机设置
  • LoRa模块A接入树莓派后打开main.py文件,更改66行,把realy=False改成realy=True,执行下面命令,LoRa模块C收到数据会从串口打印数据,而中继LoRa模块B不会从串口打印任何数据,输入下面命令:
cd ~/Documents/SX126X_LoRa_HAT_Code/RaspberryPi/python/
# node = sx126x.sx126x(serial_num = "/dev/ttyS0",freq=868,addr=0,power=22,rssi=True,air_speed=2400,relay=True)
sudo python3 main.py

STM32

本例程使用STM32F103CBT6,程序是基于HAL库

硬件连接

跳帽连接B,M0、M1跳帽移除改用STM32F103C的GPIO使用

SX1268 LoRa HAT STM32F103C
5V 5V
GND GND
RXD PA10
TXD PA9
M1 PB15
M0 PB14

例程演示

  • 连接电脑USB的LoRa模块的设置同以上三个例程相同。
  • 打开Keil工程文档,在main.c文件第75行到77行使用不同的定义使用不同的通信方式
#define TRASNSPARENT
//#define RELAY
//#define WOR
  • 选择好上面的通讯方式按F7编译,按F8下载到STM32。

代码简析

本小节简述本产品的工作过程和python程序

  • 上电后设置/dev/ttyS0串口及9600波特率,模组的M0(BCM22)引脚低电平,M1(BCM27)引脚高电平,模组进入配置模式
    def __init__(self,serial_num,freq,addr,power,rssi,air_speed=2400,\
                 net_id=0,buffer_size = 240,crypt=0,\
                 relay=False,lbt=False,wor=False):
        self.rssi = rssi
        self.addr = addr
        self.freq = freq
        self.serial_n = serial_num
        self.power = power
        # Initial the GPIO for M0 and M1 Pin
        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.M0,GPIO.OUT)
        GPIO.setup(self.M1,GPIO.OUT)
        GPIO.output(self.M0,GPIO.LOW)
        GPIO.output(self.M1,GPIO.HIGH)

        # The hardware UART of Pi3B+,Pi4B is /dev/ttyS0
        self.ser = serial.Serial(serial_num,9600)
        self.ser.flushInput()
        self.set(freq,addr,power,rssi,air_speed,net_id,buffer_size,crypt,relay,lbt,wor)
  • 下面代码中第11行至第77行设置LoRa模组的低地址,高地址,网络ID,自身频率,空速大小,缓存大小,功率大小,RSSI输入使能,加密密钥和是否使能中继模式参数,LoRa模组的寄存器点击查看寄存器描述寄存器配置方法,第79行至第113行是串口发送配置指令给LoRa模组,如果配置正确则拉低M1引脚进入收发模式
    def set(self,freq,addr,power,rssi,air_speed=2400,\
            net_id=0,buffer_size = 240,crypt=0,\
            relay=False,lbt=False,wor=False):
        self.send_to = addr
        self.addr = addr
        # We should pull up the M1 pin when sets the module
        GPIO.output(self.M0,GPIO.LOW)
        GPIO.output(self.M1,GPIO.HIGH)
        time.sleep(0.1)

        low_addr = addr & 0xff
        high_addr = addr >> 8 & 0xff
        net_id_temp = net_id & 0xff
        if freq > 850:
            freq_temp = freq - 850
            self.start_freq = 850
            self.offset_freq = freq_temp
        elif freq >410:
            freq_temp = freq - 410
            self.start_freq  = 410
            self.offset_freq = freq_temp
        
        air_speed_temp = self.lora_air_speed_dic.get(air_speed,None)
        # if air_speed_temp != None
        
        buffer_size_temp = self.lora_buffer_size_dic.get(buffer_size,None)
        # if air_speed_temp != None:
        
        power_temp = self.lora_power_dic.get(power,None)
        #if power_temp != None:

        if rssi:
            # enable print rssi value 
            rssi_temp = 0x80
        else:
            # disable print rssi value
            rssi_temp = 0x00        

        # get crypt
        l_crypt = crypt & 0xff
        h_crypt = crypt >> 8 & 0xff
        
        if relay==False:
            self.cfg_reg[3] = high_addr
            self.cfg_reg[4] = low_addr
            self.cfg_reg[5] = net_id_temp
            self.cfg_reg[6] = self.SX126X_UART_BAUDRATE_9600 + air_speed_temp
            # 
            # it will enable to read noise rssi value when add 0x20 as follow
            # 
            self.cfg_reg[7] = buffer_size_temp + power_temp + 0x20
            self.cfg_reg[8] = freq_temp
            #
            # it will output a packet rssi value following received message
            # when enable eighth bit with 06H register(rssi_temp = 0x80)
            #
            self.cfg_reg[9] = 0x43 + rssi_temp
            self.cfg_reg[10] = h_crypt
            self.cfg_reg[11] = l_crypt
        else:
            self.cfg_reg[3] = 0x01
            self.cfg_reg[4] = 0x02
            self.cfg_reg[5] = 0x03
            self.cfg_reg[6] = self.SX126X_UART_BAUDRATE_9600 + air_speed_temp
            # 
            # it will enable to read noise rssi value when add 0x20 as follow
            # 
            self.cfg_reg[7] = buffer_size_temp + power_temp + 0x20
            self.cfg_reg[8] = freq_temp
            #
            # it will output a packet rssi value following received message
            # when enable eighth bit with 06H register(rssi_temp = 0x80)
            #
            self.cfg_reg[9] = 0x03 + rssi_temp
            self.cfg_reg[10] = h_crypt
            self.cfg_reg[11] = l_crypt
        self.ser.flushInput()

        for i in range(2):
            self.ser.write(bytes(self.cfg_reg))
            r_buff = 0
            time.sleep(0.2)
            if self.ser.inWaiting() > 0:
                time.sleep(0.1)
                r_buff = self.ser.read(self.ser.inWaiting())
                if r_buff[0] == 0xC1:
                    pass
                    # print("parameters setting is :",end='')
                    # for i in self.cfg_reg:
                        # print(hex(i),end=' ')
                        
                    # print('\r\n')
                    # print("parameters return is  :",end='')
                    # for i in r_buff:
                        # print(hex(i),end=' ')
                    # print('\r\n')
                else:
                    pass
                    #print("parameters setting fail :",r_buff)
                break
            else:
                print("setting fail,setting again")
                self.ser.flushInput()
                time.sleep(0.2)
                print('\x1b[1A',end='\r')
                if i == 1:
                    print("setting fail,Press Esc to Exit and run again")
                    # time.sleep(2)
                    # print('\x1b[1A',end='\r')

        GPIO.output(self.M0,GPIO.LOW)
        GPIO.output(self.M1,GPIO.LOW)
        time.sleep(0.1)
  • 串口发送应用数据到LoRa模组通过无线发送其它LoRa节点
# the data format like as following
# "node address,frequence,payload"
# "20,868,Hello World"
    def send(self,data):
        GPIO.output(self.M1,GPIO.LOW)
        GPIO.output(self.M0,GPIO.LOW)
        time.sleep(0.1)

        self.ser.write(data)
        # if self.rssi == True:
            # self.get_channel_rssi()
        time.sleep(0.1)
  • 接收端接收到数据后从串口输出给控制器,注意第三行代码,如果接收数据量过大,请相应增加延时等待全部数据接收完毕再读取,第10行至第15行是根据RSSI使能与否打印RSSI值
    def receive(self):
        if self.ser.inWaiting() > 0:
            time.sleep(0.5)
            r_buff = self.ser.read(self.ser.inWaiting())

            print("receive message from node address with frequence\033[1;32m %d,%d.125MHz\033[0m"%((r_buff[0]<<8)+r_buff[1],r_buff[2]+self.start_freq),end='\r\n',flush = True)
            print("message is "+str(r_buff[3:-1]),end='\r\n')
            
            # print the rssi
            if self.rssi:
                # print('\x1b[3A',end='\r')
                print("the packet rssi value: -{0}dBm".format(256-r_buff[-1:][0]))
                self.get_channel_rssi()
            else:
                pass
                #print('\x1b[2A',end='\r')
  • main.py文件中,在程序运行后,等待用户按下键盘执行对应操作,输入Esc退出循环,输入i则为输入要发送的应用信息,输入s则为每间隔10秒广播一次cpu温度
try:
    time.sleep(1)
    print("Press \033[1;32mEsc\033[0m to exit")
    print("Press \033[1;32mi\033[0m   to send")
    print("Press \033[1;32ms\033[0m   to send cpu temperature every 10 seconds")
    
    # it will send rpi cpu temperature every 10 seconds 
    seconds = 10
    
    while True:

        if select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
            c = sys.stdin.read(1)

            # dectect key Esc
            if c == '\x1b': break
            # dectect key i
            if c == '\x69':
                send_deal()
            # dectect key s
            if c == '\x73':
                print("Press \033[1;32mc\033[0m   to exit the send task")
                timer_task = Timer(seconds,send_cpu_continue)
                timer_task.start()
                
                while True:
                    if sys.stdin.read(1) == '\x63':
                        timer_task.cancel()
                        print('\x1b[1A',end='\r')
                        print(" "*100)
                        print('\x1b[1A',end='\r')
                        break

            sys.stdout.flush()
            
        node.receive()
        
        # timer,send messages automatically
        
except:
    termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)


FAQ

  • 串口问题,程序默认用的串口是ttyS0,树莓派串口可能不是,可以用以下指令确认(serial0 对应的是选用串口):
ls -l /dev/serial*

Serial0-lora.png

  • 470M和433M的模块程序是一样的,默认用433M 的程序;915M 和 868M用的都是868M程序,程序默认用的是433M,改下注释即可:

915-868-Lora.png


  • 不可以的,Lora是私有协议,由于LoRa模块的射频参数不一致,内部实现、通信协议、数据编码等方面的差异
  • 比方说,需要两个或以上的SX1262 433M LoRa HAT才能实现通信,成对使用,不能和别的系列Lora通信
  • 因此请选择同款的LoRa模块,以确保硬件和协议的一致性;或者改用开放协议的Lorawan模块


国内使用SX1268 433M LoRa HAT,SX1262 868M LoRa HAT,SX1262 915M LoRa HAT只能是用来开发产品,不能大面积覆盖区域网络,国内使用SX1268 470M LoRa HAT覆盖区域网络


  • 地面吸收、反射无线电波,靠近地面测试效果较差;当存在直线通信障碍时,通信距离会相应的衰减;
  • 天线附近有金属物体,或放置于金属壳内,信号衰减会非常严重;海水具有极强的吸收无线电波能力,故海边测试效果差;
  • 温度、湿度,同频干扰,会导致通信丢包率提高;室温下电源低压低于推荐值,电压越低发功率越小;
  • 功率寄存器设置错误、空中速率设置过高(空中速率越高,距离越近);


上方跳线帽置于B;下方的跳线帽M2去掉就可以读取参数啦:
Lora-M2.png


不支持
需要支持LoRaWAN网络协议的话选购这个Pico-LoRa-SX1262-868M ,可以搭配LoRaWAN网关SX1302 LoRaWAN Gateway HAT:

补充说明:	
在计算机网络OSI模型中,LoRa位于最底部的物理层中,一般情况下泛指使用LoRa技术的射频芯片;	
LoRaWAN是在LoRa传输技术 基础之上的以MAC层为主的一套协议标准。有了这个标准之后,LoRaWAN的就变成一种网络技术。
仅支持Lora而不支持Lorawan的话,可以进行点对点通信,但无法建立更高级别的网络连接,如LoRaWAN网络。如果需要建立更大规模的LoRa网络,建议使用LoRaWAN协议。


  • 流模式(非确认模式):

在流模式下,LoRa设备发送数据后不会等待接收方的确认。这种模式适用于对实时性要求较高或对数据完整性要求不高的应用。

  • 数据包模式(确认模式):
在数据包模式下,LoRa设备在发送数据后会等待接收方的确认(ACK)。这种模式适用于需要确保数据完整性和可靠性的应用。


售后

联系人:黄工
EMAIL:3005423122@qq.com
电话:0755-83040712
QQ:3005763927
微信:扫下方二维码添加
Hkx-wx.jpg

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证