ネコと和解せよ

マイクロチップ向けのTBSKmodemをリリースしました(半二重通信OK)

先日作ったラズピコ用受信専用モデムの続きです。
双方向の半二重通信ができるようになりました。

nyatla.hatenadiary.jp



細かいチュートリアル📣RaspberryPi Picoとブラウザで通信するに書きましたので、手っ取り早くでON/OFFリモコンを体験する手順を書いてきます。

ハードウェアを作る。

この通りに配線します。

材料は以下の通り。

  • 抵抗 100kΩ ✖ 1 、 10kΩ✖2
  • コンデンサ 10μF✖ 1 、47μF以上✖ 1 (耐圧16V)
  • ダイオード 適当な物✖2
  • RaspberryPi pico ✖ 1
  • 圧電素子 パッシブタイプの物で直径が2cmくらいのもの✖1

回路図です。


完成するとこんな感じになると思います。

ソフトを書き込む

github.com

まずはライブラリをArduinoIDEにセットアップしてください。
使うソフトはTBSKmodemMicroのArudino版です。

  1. https://github.com/nyatla/TBSKmodemMicro/releasesからTbskModemMicro-Ardiuno.zipをダウンロード。
  2. Arduino IDEを起動し、スケッチ→ライブラリをインクルード→Zip形式のライブラリをインストール...を選択。
  3. TbskModemMicro-Ardiuno.zipを追加してIDEを再起動。

IDEを再起動したら、次のスケッチをArudinoにコピペします。

#include "TbskModemMicro.h"
using namespace TBSKmodemMicro;

TbskPulseModulator<100> tpm;
TbskDemodulator<100> dem;
#define LED_PIN 25
#define AD_PIN 26
#define SP_PIN 26

bool current_led=true;
void setup() {
  pinMode(LED_PIN, OUTPUT);  //LED
  pinMode(AD_PIN, INPUT);
  pinMode(SP_PIN, OUTPUT);
  analogReadResolution(12);
}
void loop()
{
  int r=-1;
  TMM_UINT8 recv[10] = {};
  digitalWrite (LED_PIN,current_led?HIGH:LOW);

  pinMode(AD_PIN, INPUT);
  while(r==-1){
     r=dem.read(AD_PIN,16000,recv,10,5000);
  }
  char status[7+3+1];
  if(memcmp(recv,"on",2)==0){
    //on
    sprintf(status,"status:on\0");    
    current_led=true;
  }else if(memcmp(recv,"off",3)==0){
    //off
    sprintf(status,"status:off\0");    
    current_led=false;
  }else{
    sprintf(status,"ERROR");
  }
  delay(.5);
  pinMode(SP_PIN, OUTPUT);
  tpm.write(SP_PIN,16000,(const char*)status);
  return;
}

コンパイルしてラズピコに書き込んでおいてください。

スマホと通信する

ブラウザ側のアプリは設置してあるものを使います。
ソースを見るとわかりますが、ペラッとした1枚のHTMLです。

https://nyatla.jp/tbskmodem/v0.4.1/getstarted/_on_off_sample_for_zenn.html



Startボタンを押してから、ONやOFFボタンを押してください。
音が鳴ればOK、準備完了です。


スマホ圧電素子に近づけて信号を送受信してください。

www.youtube.com


圧電素子で入出力を共用する場合、通信可能な物理条件がとてもシビアです。
スマホ内部のスピーカーとマイクの位置にも注意が必要です。

辛抱強く通信できる条件を探しましょう。


おしまい。