0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Loraを受信できない

0
Last updated at Posted at 2026-01-18

rectangle_large_type_2_15618a768a50045341f34541c1eca4a0.jpeg
上に見えるのが子機、下に見えるのが親機です。子機は色んなセンサーがついてるので大きめですが、親機は受信してlcdに表示するだけなので小柄です。なお、lcdは手元に1個しかないので、子機だけに装着しています。

親機にloraの受信コードを書いたのですが、受信しませんでした。何故なんだろう?

もう自力でどうにもならないのでAIと相談しながらやってみる事にしました。そしたらAIちゃんは「pic16f1827の18番ピンに刺し変えて」とか言っちゃうんですよ。pic16f1827のデータシートを見ると18番ピンにはtxもrxも無いんです。7番ピンと8番ピンが正解じゃないか!

しかし、受信できない。

有線なら受信できるのか?

ならば「loraを介せずに、有線で通信はできるのか?」と思い、一旦pic16f1827以外のパーツを取り去りました。

■子機
pic16f1827

  1. 空き
  2. 空き
  3. 空き
  4. 空き
  5. ブレッドボードの-へ
  6. 空き
  7. 空き
  8. 親機picの8番へ
  9. 空き
  10. 空き
  11. 空き
  12. 空き
  13. 空き
  14. ブレッドボードの+へ
  15. 空き
  16. 空き
  17. 空き
  18. 空き

ブレッドボードへmb102で5v供給
※子機と親機のブレッドボードのgnd同士は導線で繋がっている

■親機
pic16f1827

  1. 空き
  2. 空き
  3. 空き
  4. プルアップ抵抗10k,snapへ
  5. ブレッドボードの-へ
  6. 空き
  7. 空き
  8. 子機picの8番へ
  9. 空き
  10. 空き
  11. 空き
  12. snapへ
  13. snapへ
  14. ブレッドボードの+へ
  15. 空き
  16. 空き
  17. 空き
  18. 空き

ブレッドボードへmb102で5v供給
※子機と親機のmb102は同一のもの。

//■子機
#include <xc.h>
#pragma config FOSC = INTOSC, WDTE = OFF, PWRTE = ON, MCLRE = ON, CP = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO = OFF, FCMEN = OFF
#pragma config WRT = OFF, STVREN = ON, BORV = LO, LVP = ON 

#define _XTAL_FREQ 4000000

void init_uart(void) {
    OSCCON = 0x6A;    
    ANSELB = 0x00;
    APFCON0 = 0x00; // 子機はデフォルトの8番(TX)から送信
    TRISB2 = 0;     // 8番(TX)を出力
    
    TXSTAbits.BRGH = 1;    // 高速モード
    BAUDCONbits.BRG16 = 0; // 8bitタイマー
    SPBRG = 25;            // 9600bps

    RCSTAbits.SPEN = 1;
    RCSTAbits.CREN = 1;
    TXSTAbits.TXEN = 1;
}

void putch(char c) {
    while(!TRMT); // 送信完了を待つ
    TXREG = c;
}

void main(void) {
    init_uart();
    
    unsigned char id = 1;
    unsigned char val = 123;
    
    while(1) {
            putch(id);
            putch(val);
            __delay_ms(1000);
        }
}
//■親機
#include <xc.h>
#pragma config FOSC = INTOSC, WDTE = OFF, PWRTE = ON, MCLRE = ON, CP = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO = OFF, FCMEN = OFF
#pragma config WRT = OFF, STVREN = ON, BORV = LO, LVP = ON 

#define _XTAL_FREQ 4000000
unsigned char id, val;

void init_uart(void) {
    OSCCON = 0x6A;
    ADCON0 = 0x00;
    ANSELB = 0x00;   // 8番(RB2)をデジタルに
    APFCON0 = 0x01;  // RXSEL=1で8番ピン(RB2)をRXに設定(LCDが7番ピンを使う為)
    TRISB2 = 1;      // 8番ピンを入力に設定
    
    TXSTAbits.BRGH = 1;    // 高速モード
    BAUDCONbits.BRG16 = 0; 
    SPBRG = 25;            // 9600bps

    RCSTAbits.SPEN = 1;
    RCSTAbits.CREN = 1;
}

char uart_read(void) {
    if (RCSTAbits.OERR || RCSTAbits.FERR) {
        RCSTAbits.CREN = 0;
        RCSTAbits.CREN = 1;
    }
    while(!PIR1bits.RCIF);   // データが届くのを待つ
    return RCREG;
}

void main(void) {
    init_uart();
   
    while(1) {
        id  = uart_read(); 
        val = uart_read();           
      
        if(id == 1) {   //ブレークポイント
            NOP(); 
        }
    }
}

最小構成子機親機loraなし.png

PXL_20260118_024623269.jpg
結果、親機でデータ受信を確認。有線なら通信できるようです。

やはり無線にしたい

でも、目的は遠隔地で受信する事なので、やはりloraを介したい。
次は無線化を試みます。

■子機
pic16f1827

  1. 空き
  2. 空き
  3. 空き
  4. 空き
  5. ブレッドボードの-へ
  6. 空き
  7. 空き
  8. プルアップ抵抗10k,loraのrxへ
  9. 空き
  10. 空き
  11. 空き
  12. 空き
  13. 空き
  14. ブレッドボードの+へ
  15. 空き
  16. 空き
  17. 空き
  18. 空き

E220-900T22S(JP)-EV2
M0    ブレッドボードの-へ
M1    ブレッドボードの-へ
RX    picの8番へ
TX    空き
AUX    空き
VCC    ブレッドボードの+へ
GND    ブレッドボードの-へ

ブレッドボードへmb102で5v供給
※子機と親機のブレッドボードのgnd同士は導線で繋がってない(実用時は遠隔ゆえgnd共有が不可能な為)

■親機
pic16f1827

  1. 空き
  2. 空き
  3. 空き
  4. プルアップ抵抗10k,snapへ
  5. ブレッドボードの-へ
  6. 空き
  7. 空き
  8. loraのtxへ
  9. 空き
  10. 空き
  11. 空き
  12. snapへ
  13. snapへ
  14. ブレッドボードの+へ
  15. 空き
  16. 空き
  17. 空き
  18. 空き

E220-900T22S(JP)-EV2
M0    ブレッドボードの-へ
M1    ブレッドボードの-へ
RX    空き
TX    pixの8番へ
AUX    空き
VCC    ブレッドボードの+へ
GND    ブレッドボードの-へ

ブレッドボードへmb102で5v供給
※子機と親機のmb102は同一のもの。

//■子機
#include <xc.h>
#pragma config FOSC = INTOSC, WDTE = OFF, PWRTE = ON, MCLRE = ON, CP = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO = OFF, FCMEN = OFF
#pragma config WRT = OFF, STVREN = ON, BORV = LO, LVP = ON 

#define _XTAL_FREQ 4000000

void init_uart(void) {
    OSCCON = 0x6A;    
    ANSELB = 0x00;
    APFCON0 = 0x00; // 子機はデフォルトの8番(TX)から送信
    TRISB2 = 0;     // 8番(TX)を出力
    
    TXSTAbits.BRGH = 1;    // 高速モード
    BAUDCONbits.BRG16 = 0; // 8bitタイマー
    SPBRG = 25;            // 9600bps

    RCSTAbits.SPEN = 1;
    RCSTAbits.CREN = 1;
    TXSTAbits.TXEN = 1;
}

void putch(char c) {
    while(!TRMT); // 送信完了を待つ
    TXREG = c;
}

void main(void) {
    init_uart();
    
    unsigned char id = 1;
    unsigned char val = 123;
    
    while(1) {
            putch(id);
            putch(val);
            __delay_ms(1000);
        }
}
//■親機
#include <xc.h>
#pragma config FOSC = INTOSC, WDTE = OFF, PWRTE = ON, MCLRE = ON, CP = OFF
#pragma config BOREN = ON, CLKOUTEN = OFF, IESO = OFF, FCMEN = OFF
#pragma config WRT = OFF, STVREN = ON, BORV = LO, LVP = ON 

#define _XTAL_FREQ 4000000
unsigned char id, val;

void init_uart(void) {
    OSCCON = 0x6A;
    ADCON0 = 0x00;
    ANSELB = 0x00;   // 8番(RB2)をデジタルに
    APFCON0 = 0x01;  // RXSEL=1で8番ピン(RB2)をRXに設定
    TRISB2 = 1;      // 8番ピンを入力に設定
    
    TXSTAbits.BRGH = 1;    // 高速モード
    BAUDCONbits.BRG16 = 0; 
    SPBRG = 25;            // 9600bps

    RCSTAbits.SPEN = 1;
    RCSTAbits.CREN = 1;
}

char uart_read(void) {
    if (RCSTAbits.OERR || RCSTAbits.FERR) {
        RCSTAbits.CREN = 0;
        RCSTAbits.CREN = 1;
    }
    while(!PIR1bits.RCIF);   // データが届くのを待つ
    return RCREG;
}

void main(void) {
    init_uart();
   
    while(1) {
        id  = uart_read(); 
        val = uart_read();           
      
        if(id == 1) {   //ブレークポイント
            NOP(); 
        }
    }
}

最小構成子機親機.png

loraを介すので回路が変わりましたが、コードは同じです。
これでうまく行く筈……。
PXL_20260118_032809385.jpg

と思いきや、いつまで待っても親機で受信しません。

私ではもうコードにも配線にも原因が見つけられません。
他に原因があるとすれば、E220-900T22Sのアンテナ同士が近すぎる事。
今は写真の通り15cmくらいしか離れていません。
これは手元でデバッグしやすくする為なのですが、本来アンテナ同士は何メートルも離れている筈。
E220-900T22S(JP)-EV2のページはこちら
https://dragon-torch.tech/wp-content/uploads/2024/11/DS241012JA_E220-900T22Xv2_Rev.1.0.2.pdf

そしてE220-900T22S(JP)、E220-900T22L(JP)のデータシートがありました。
https://dragon-torch.tech/wp-content/uploads/2024/11/DS241012JA_E220-900T22Xv2_Rev.1.0.2.pdf

しかし、最短距離という記載はありません。
最短距離が無いなら15cmでも送受信できそうですが、次回は2~3mくらい離して検証してみます。

それでも受信できないとなれば、もう、どうすればいいのやら……。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?