文章出處
文章列表
以下的代碼適用于LoRa sx1276點對點的通訊,純粹的考慮在非發射模式下即為接收模式
配置sx1276的射頻參數,并且切換到接收模式
//bandwidth [0:125 1:250 2:500]
void set_private_LoRa_para(uint32_t freq, uint8_t datarate_index, uint8_t bandwidth,bool rxContinuous)
{
uint16_t timeout = 5;//DR_0 DR_1 DR_2
uint8_t max_payload_index = 0;
RadioModems_t modem;
uint8_t datarate = Datarates[datarate_index];
SX1276Write(0x4B,0x19);//設置使用外部晶振
/* 此處使能外部晶振 */
//此處映射回調函數,RXDONE/TXDONE/....
if( ( datarate_index == DR_3 ) || ( datarate_index == DR_4) )
{
timeout = 8;
}
else if( datarate_index == DR_5 )
{
timeout = 10;
}
else if(datarate_index == DR_6)
{
timeout = 14;
}
Radio.SetChannel( freq );
modem = MODEM_LORA;
Radio.SetRxConfig( modem, bandwidth, datarate, 1, 0, 8, timeout, false, 0, true, 0, 0, false, rxContinuous );
Radio.SetTxConfig( MODEM_LORA, 20, 0, bandwidth, datarate, 1, 8, false, true, 0, 0, false, 3e3 );
//設置最大長度為255字節
Radio.SetMaxPayloadLength( modem, 255);
// 0 表示Continuous mode,其他表示超時時間
Radio.Rx( 0 ); // Continuous mode
Radio.SetModem( MODEM_LORA );
SX1276Write(REG_LR_SYNCWORD,0x34);//設置同步字的值
}
SX1276 發包
在配置好射頻參數之后,發包就像發串口數據一樣,直接傳入數據的指針和長度可以完成了。
//目前只支持LoRa模式
void private_tx(uint8_t *src_data,uint16_t src_data_len)
{
//發送數據包
// Send now
Radio.Send( src_data, src_data_len );
}
文章列表
全站熱搜