系列文章:
【从0到1搭建LoRa物联网】1、LoRa物联网的架构
【从0到1搭建LoRa物联网】2、终端设备开发方式
【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件
【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO
【从0到1搭建LoRa物联网】5、国产LoRa终端ASR6505驱动DHT11
【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
【从0到1搭建LoRa物联网】7、国产LoRa终端ASR6505驱动段式LCD例程

1、前言

ASR6505是SIP封装的STM8L和SX1262,因此对SX1262的操作实质就是对一个SPI外设的操作。
ASR6505内部连接:
SX1262 STM8L
RESET <--------------> PH_0
MOSI <--------------> PI_2
MISO <--------------> PI_3
SCLK <--------------> PI_1
BUSY <--------------> PH_1
DIO_1 <--------------> PH_2
BUSY:SX1262忙检测引脚,
DIO1:通常配置为外部中断,来唤醒mcu起来处理射频事件。

另外SX1262的NSS以及射频开关电源控制引脚连接:

NSS <--------------> PD_7
SWITCH_POWER <--------------> PG_6

因此,后续的射频操作都是基于上面的连接进行的。LoRa的寄存器繁多,所幸的是,官方已经提供了完整的驱动,我们首先是要会用,然后再去深究原理。

2、PingPong通信

所谓“PingPong”:就是一发一收、一发一收,如此反复循环,即就是通常所说的点对点通讯,市面上的大部分私有协议(非LoRaWAN)也是在此基础上改进的。一些小型物联网搭建,就可以用点对点通讯。

3、无线射频参数

频率:无线最重要的参数,虽然SX1262支持150-960MHZ,但是为了更好的硬件射频性能,硬件已经匹配为470-510M。

发射功率:0-22dBm,功率越大,功耗越大。

扩频因子:也可以理解成速率,取值6-12,6速率最快,12最慢,速率越快,抗干扰越差,距离越近,反之。

编码率:取值1-4,分别对应4/5,4/6, 4/7, 4/8。

IQ极性:收发要保持相同。

4、实验设计

两个开发板相互发送数据,串口打印接收的数据,并打印RSSI和SNR。

5、代码实现

int main( void )
{bool isMaster = true;// 主从机,从机的时候改为falseuint8_t i;// Target board initializationBoardInitMcu( );BoardInitPeriph( );printf("ASR6505 PingPong  test !\r\n");// Radio initializationRadioEvents.TxDone = OnTxDone; //注册回调函数,下同RadioEvents.RxDone = OnRxDone;RadioEvents.TxTimeout = OnTxTimeout;RadioEvents.RxTimeout = OnRxTimeout;RadioEvents.RxError = OnRxError;Radio.Init( &RadioEvents );Radio.SetChannel( RF_FREQUENCY );//配置射频收发参数Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,LORA_SPREADING_FACTOR, LORA_CODINGRATE,LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,0, true, 0, 0, LORA_IQ_INVERSION_ON, true );Radio.Rx( RX_TIMEOUT_VALUE );while( 1 ){switch( State ){case RX:if( isMaster == true ){if( BufferSize > 0 ){if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, 4 ) == 0 ){printf("Received: PONG,rssi=%d,snr=%d\r\n",RssiValue,SnrValue);// Send the next PING frameBuffer[0] = 'P';Buffer[1] = 'I';Buffer[2] = 'N';Buffer[3] = 'G';// We fill the buffer with numbers for the payloadfor( i = 4; i < BufferSize; i++ ){Buffer[i] = i - 4;}DelayMs( 1 );printf("Send: PING\r\n");Radio.Send( Buffer, BufferSize );}else if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 ){ // A master already exists then become a slaveisMaster = false;Radio.Rx( RX_TIMEOUT_VALUE );}else // valid reception but neither a PING or a PONG message{    // Set device as master ans start againisMaster = true;Radio.Rx( RX_TIMEOUT_VALUE );}}}else{if( BufferSize > 0 ){if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, 4 ) == 0 ){printf("Received: PING,rssi=%d,snr=%d\r\n",RssiValue,SnrValue);// Send the reply to the PONG stringBuffer[0] = 'P';Buffer[1] = 'O';Buffer[2] = 'N';Buffer[3] = 'G';// We fill the buffer with numbers for the payloadfor( i = 4; i < BufferSize; i++ ){Buffer[i] = i - 4;}DelayMs( 1 );Radio.Send( Buffer, BufferSize );printf("Send: PONG\r\n");}else // valid reception but not a PING as expected{    // Set device as master and start againisMaster = true;Radio.Rx( RX_TIMEOUT_VALUE );}}}State = LOWPOWER;break;case TX:Radio.Rx( RX_TIMEOUT_VALUE );State = LOWPOWER;break;case RX_TIMEOUT:case RX_ERROR:if( isMaster == true ){// Send the next PING frameBuffer[0] = 'P';Buffer[1] = 'I';Buffer[2] = 'N';Buffer[3] = 'G';for( i = 4; i < BufferSize; i++ ){Buffer[i] = i - 4;}DelayMs( 1 );Radio.Send( Buffer, BufferSize );printf("Sent: PING\r\n");}else{Radio.Rx( RX_TIMEOUT_VALUE );}State = LOWPOWER;break;case TX_TIMEOUT:Radio.Rx( RX_TIMEOUT_VALUE );State = LOWPOWER;break;case LOWPOWER:default:// Set low powerbreak;}TimerLowPowerHandler( );// Process Radio IRQRadio.IrqProcess( );}
}

6、代码分析

主机上电后,处于接收状态,若在一定时间内(设定的RX_TIMEOT)没有收到从机的回复数据,则主机主动发送“Ping”数据。发送完成后处于接收状态,若在一定时间内若收到从机的回复,则从接收转变为发送,继续发送“Ping”数据。若收到从机的回复数据,先判断数据的正确性,然后再打印出来。
从机上电后,处于接收状态,若接收超时,则继续重新接收,直到收到主机的数据。收到数据后,先判断数据的正确性,然后打印RSSI和SNR,最后再发送“Pong”数据回复主机。

7、实现现象

欢迎关注微信公众号【物联网思考】,回复关键字“ ASR6505”获取资料,《从0到1搭建LoRa物联网》系列的所有软硬件资料将会分享在公众号。

【从0到1搭建LoRa物联网】8、国产LoRa终端ASR6505 PingPong通信相关推荐

  1. 【从0到1搭建LoRa物联网】9、国产LoRa终端ASR6505 PingPong通信OLED显示

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  2. 【从0到1搭建LoRa物联网】15、LoRa连接到The Things Network

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  3. 【从0到1搭建LoRa物联网】11、ASR6505 LoRaWAN通信

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  4. 【从0到1搭建LoRa物联网】13、低成本单通道网关(一)

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  5. 【从0到1搭建LoRa物联网】16、LoRa连接到腾讯云物联网平台

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  6. 【从0到1搭建LoRa物联网】17、LoRa连接到chirpstack

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  7. 【从0到1搭建LoRa物联网】10、LoRa终端ASR6505 ADC采样

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  8. 【从0到1搭建LoRa物联网】18、LoRa应用服务器Application Server

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  9. 【从0到1搭建LoRa物联网】20、LoRaWAN扩展

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

最新文章

  1. java流类图结构_java I/O 流总结
  2. sepFilter2D函数
  3. 【零基础】讲述网络安全介绍
  4. Alwayson--问题总结二
  5. 2019蚂蚁金服 Java面试题目!涵盖现场3面真题
  6. 知荐 | 自动驾驶的“大脑”:决策规划篇
  7. ——————————
  8. context:component-scan标签的use-default-filters属性的作用以及原理分析
  9. 解决idea中maven plugins标红的问题
  10. 先有鸡还是先有蛋? 加拿大科学家揭开谜底
  11. 重拾Javascript(五)--优化字符串操作
  12. linux环境下常用的查找命令find、which、grep
  13. 【山东seo】-淄博孔祥永seo技术分享博客
  14. 微信朋友圈点赞测试点【杭州多测师】【杭州多测师_王sir】
  15. Android手机的驱动安装
  16. 基本面分析:原理、类型和使用方法
  17. 主键和唯一索引的区别
  18. 三种查看MySQL数据库版本的方法
  19. racket android,RacketGhost | F-Droid - Free and Open Source Android App Repository
  20. mkv文件怎么转换成mp4?来看看这四种转换方式吧!

热门文章

  1. RabbitMQ(四)远程连接RabbitMQ
  2. Java简单语句项目练习——英雄联盟商城
  3. 【python小游戏毕设】塔防小游戏设计与实现
  4. 深度分享|姚劲波:创业要趁早,要做未来的事情!
  5. 嵌入式系统、linux和嵌入式linux的区别
  6. linux echo 字体大小 背景 字体颜色 的编码
  7. 将word文件中的文本转成字符串
  8. Eclipse不提示的解决办法
  9. JAVA中的Map集合
  10. 内核启动分析(三)——zImage 解压缩阶段