天天看點

E22 SX1268 LoRa子產品傳輸測試(定點模式)發送接收序列槽消息 windows與linux環境下C語言代碼前言實作過程

前言

近期因項目需求,對LoRa透傳子產品進行測試學習。

本次測試的子產品是成都ebyte公司的LoRa子產品,型号為SX1268。該子產品采用序列槽透傳模式。

本部落客要記錄了子產品的定點傳輸模式,透傳模式相對簡單,可以參考大多數的序列槽通信代碼。

什麼是序列槽透傳?

所謂序列槽透傳,就是不管所傳輸的内容、資料協定形式。隻是把需要傳輸的内容當成一組二進制資料完美地傳輸到接收端。不對要傳的資料做任何處理。

mcu都有序列槽,序列槽也是最簡單、最常見的mcu通訊方式。而序列槽透傳實際上使用的其他的通訊方式,比如以太網、藍牙、zigbee、gprs等等,而序列槽資料作為這些協定幀中的資料區。本質上是其他通訊方法。但是對于嵌入式的開發者來說,實際上是對序列槽進行程式設計,對資料的接收、發送都是使用序列槽。而資料的傳輸實際是通過其他方式,透傳子產品(或晶片)負責把序列槽資料以其他方式(比如藍牙)發送、同時也把收到的資料轉化成序列槽資料。這樣對于嵌入式mcu(嵌入式程式員)這些子產品相當于透明的。使用透傳子產品可以簡化程式設計(不用實作複雜的協定棧)、增加靈活性(子產品化,更換透傳子產品可以改變通訊方式)、使老裝置具有新的通訊方式(以前的裝置可能并沒有源碼,隻增加透傳子產品就可利用現在進階網絡)。

故本文對于同樣是序列槽透傳方式進行通信的子產品,皆具有一定的參考價值。

實作過程

子產品配置

本次使用了四塊LoRa子產品進行實驗。使用官方提供的配置軟體。官方的配置軟體可以通過如下管道獲得:

登入ebyte官網/資料下載下傳頁面:http://www.ebyte.com/data-download.html?page=3&id=37&cid=31#load

在網頁中選擇:軟體工具/參數設定軟體,找到E22系列對應的版本進行下載下傳

對四個子產品分别進行配置。需要修改的參數有傳輸方式、子產品位址和子產品信道三項。如下圖所示:

E22 SX1268 LoRa子產品傳輸測試(定點模式)發送接收序列槽消息 windows與linux環境下C語言代碼前言實作過程

對于四個子產品的配置參數分别按照以下表格進行設定:

E22 SX1268 LoRa子產品傳輸測試(定點模式)發送接收序列槽消息 windows與linux環境下C語言代碼前言實作過程

子產品調試

為測試子產品功能是否正常,在使用前先使用序列槽調試助手進行調試。

序列槽調試助手同樣可以在上面網站的資源清單進行下載下傳,大多數版本的序列槽助手都是适用的。

将四個LoRa子產品全部接入筆記本電腦,打開各自的序列槽,進行發送測試。出現以下結果說明子產品按照配置的參數能夠正常工作。

E22 SX1268 LoRa子產品傳輸測試(定點模式)發送接收序列槽消息 windows與linux環境下C語言代碼前言實作過程

在定點傳輸功能中,資料并不像透傳方式,會廣播至該信道下的所有終端,而是僅會傳輸至事先定義的目标位址處。在本次測試下的四塊LoRa子產品發送方與接收方關系如下圖所示:

E22 SX1268 LoRa子產品傳輸測試(定點模式)發送接收序列槽消息 windows與linux環境下C語言代碼前言實作過程

代碼編寫

本部落格給出了windows和linux系統的通信demo,相對簡單,供剛拿到子產品的同學擴充學習。

定點傳輸模式實作效果:

位址為2的子產品向位址為3的子產品定點發送内容(信道編号為5)。有關參數根據自己所需的要求靈活修改。

windows版本代碼(VS2019)

#include<iostream>
#include<windows.h>

using namespace std;

int main()
{
    HANDLE hcom;
    hcom = CreateFile(L"COM4", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING //連接配接了電腦的COM4口
        , FILE_ATTRIBUTE_NORMAL, NULL);
    if (hcom == INVALID_HANDLE_VALUE)
    {

        fprintf(stderr, "打開序列槽失敗!\n");
        exit(0);
    }
    SetupComm(hcom, 1024, 1024);
    DCB dcb;
    GetCommState(hcom, &dcb);
    dcb.BaudRate = 9600;
    dcb.ByteSize = 8;
    dcb.Parity = 0;
    dcb.StopBits = 1;
    SetCommState(hcom, &dcb);
    char v2vbuff[] = { 0x00, 0x03, 0x05, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };  //向位址為3,信道為5的目标發送16進制的内容AA BB CC DD EE FF
    DWORD dwWrittenLen = 0;
    int k = 0;
    for (;;) {
        if (!WriteFile(hcom, v2vbuff, 9, &dwWrittenLen, NULL))
        {
            fprintf(stderr, "發送資料失敗!\n");
        }

        k++;

        printf("往序列槽發送資料成功!第%d次\n", k);
        Sleep(1000);  //1s發送一次
    }

    return 0;
}
           

linux版本代碼(基于樹莓派)

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{    
    int running = 1;
    void sig_handle(int sig)
    {
        if(sig == SIGINT)   
        running = 0;
    }
    
    signal(SIGINT, sig_handle);    
    int fd;
    if(wiringPiSetup() < 0)
    {
        printf("wiringPi setup failed.\n");
        return 1;
    }

    int baudrate = 9600;
    if((fd = serialOpen("/dev/ttyUSB0",baudrate)) < 0)
    {
        printf("serial open failed.\n");
        return 1;
    }

    serialPrintf(fd, "Connect with LoRa success"); 
    
    while(running)
    {
        char buff[] = {0,3,5,170,187,204,221,238,255};	//對應為16進制的0x00, 0x03, 0x05, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
		write(fd,buff,9);
        
        printf("send message success\n");
		sleep(1);
    }

    serialClose(fd);
    printf("close serial.\n");

    return 0;
}
           

在電腦上連接配接位址為3的LoRa子產品,使用序列槽調試助手打開對應的序列槽,運作相應代碼,可以顯示如下結果:

E22 SX1268 LoRa子產品傳輸測試(定點模式)發送接收序列槽消息 windows與linux環境下C語言代碼前言實作過程

至此,LoRa子產品的定點傳輸模式測試完成,後續更多的功能亟待開發。

參考連結

https://blog.csdn.net/bean_business/article/details/107876230

http://www.ebyte.com/data-download.html?id=39&pid=31#load

https://blog.csdn.net/dalaoadalaoa/article/details/45399343

繼續閱讀