OTAができるようにobnizとarduinoを連携する

書き込む際には、obnizが2つ必要になります。

構成としてはarduinoの書き込みをobnizデバイス2台で中継する形になります。

ハード構成

具体的に接続方法を見ていきましょう。

SerialBaudRate
https://www.arduino.cc/reference/en/language/functions/communication/serial/

こちらのSERIAL PINS(PCと接続して書き込みを行うピン)を使用します。

arduinoのserialとobnizを接続します

VCC,GND,RX,TXの4本の結線が必要です。

書き込みプログラム

arudinoはプログラム書き込みも、シリアルログもすべてUARTで使用しています。

ですので、UARTに対応すればこちらにて書き込みが完了します。

arduino側のobnizデバイスと、PC側のobnizデバイスを接続します。

書き込みのためには、通信開始時にリセットを行う必要があるため、そちらも追加します。

var obnizA = new Obniz("OBNIZ ID HERE"); //PC-side obniz
obnizA.onconnect = async function () {
  var obnizB = new Obniz("OBNIZ ID HERE"); //Arduino-side obniz
  obnizB.onconnect = async function(){
    var baud = 115200; // configration for UNO
    obnizA.uart0.start({tx: 0, rx: 1, baud:baud });  
    obnizB.uart0.start({tx: 0, rx: 1, baud:baud });  
    obnizA.io3.output(false); //USB-UART GND
    obnizB.io4.output(true); //Arduino Power
    obnizB.io3.output(false); //Arduino GND
    obnizB.io2.output(true); //DTR(Arduino Reset)
    
    //Arduino GND
    $("#on").click(function(){
      obnizB.io3.output(false);
    })
    $("#off").click(function(){
      obnizB.io3.output(true);
    })
    
    var lastTime = new Date().getTime();
    obnizA.uart0.onreceive = async function(data, text) {
      // PC to arduino
      obnizB.uart0.send(data);

      // automatic Reset to turn arduino to upload-mode
      var now = new Date().getTime();
      if (now - lastTime > 1000){
        obnizB.io2.output(false);
        obnizB.wait(10);
        obnizB.io2.output(true);
      }
      lastTime = new Date().getTime();
    }
    
    obnizB.uart0.onreceive = async function(data, text) {
      // arduino to pc
      obnizA.uart0.send(data);
    }   
  }
}

注意点として、通信速度を一致させる必要があります。

今回、通信速度がいくつかでてきます。

obniz側に書いたvar baud = 115200; が青色吹き出しの2つのBaudRate の指定になります。

書き込みで使用できる通信速度はデバイスごとに決まっているため、そちらに合わせる必要があり、
Arduino側の黄色吹き出し・PC側のオレンジ吹き出しはデバイスごとに固定になっています。

たとえば下記のような速度です。

  • arduino UNO : 115200
  • arduino Pro : 57600

他のボードの書き込み速度を知るには、こちらが参考になります。

https://github.com/Optiboot/optiboot/blob/master/optiboot/boards.txt