• Hi everyone,
    I just discovered MyController, following the use of MySensors 2.3.2 and I see that there is a lot of potential compared to MYScontroller: bravo to the whole team!

    What works: My Nodes and Gateway (serial) work and are recognized in MYController.
    The (minimum) equipment to test FOTA: I have a 328p Bare Bone (8MHz internal) + SPI Flash memory + 3.3v regulator + RFM69HCW.
    What I would like to do: if I understood correctly: just burn the DualOptiboot bootloader WITHOUT SKETCH. The first time it is turned on, it will ask MYController for an identifier and I could load the sketch from MYController OTA: Actions >> Upload firmware.

    It's just ?

    For that, I need the DualOptiboot.hex which corresponds to my Node (8MHz internal, BOD 2.7v ...) which I must flash in my 328P with AVRDUDESS.

    Someone to help me find this bootloader.

  • @superninja Welcome to MyController ­čÖé
    I usually go with Sensebender bootloader.
    Steps :

    Afterburn DualOptiboot, you should add a MySensors sketch via serial (OTA feature should be enabled on your sketch). From this point, OTA works with DualOptiboot

  • @jkandasa Thanks for this fast and clear response , i'll test this and come back here .

  • @jkandasa this is what i do :

    • I loaded the ArduinoISP sketch on an Arduino PRO mini to use as a programmer.

    • then I configured Arduino IDE with the SensBender 8MHz board like this:
      and I started the bootloader burning which went well.

    • I unplugged the ProMini and plugged in an FTDI converter to program the ATMega 328P by configuring like this:

    I injected this simple BLINK LED sketch :

    // Enable debug prints to serial monitor
    //#define MY_DEBUG                  //debug de MySensors
    //#define MY_DEBUG_VERBOSE_SIGNING  //debug de la signature
    //===== RFM config =====
    #define MY_RADIO_RFM69
    #define MY_IS_RFM69HW //with H(CW)
    #define MY_RFM69_NEW_DRIVER
    #define MY_RFM69_FREQUENCY  RFM69_868MHZ
    //#define MY_RFM69_ATC_TARGET_RSSI_DBM (-80)
    //#define MY_RFM69_MAX_POWER_LEVEL_DBM (10)   // max. TX power 10dBm = 10mW
    //1mW = 0dBm  10mW = 10dBm  25mW = 14dBm  100mW = 20dBm
    //#define MY_DEBUG_VERBOSE_RFM69  //debug du signal RF
    //#define MY_RFM69_NETWORKID 101
    #define MY_RFM69_IRQ_PIN 2
    #define MY_RFM69_CS_PIN 10
    //===== LED =====
    #define LED_BUILTIN 9       //pb1 pin15
    //========== NODE ID ==========
    #define MY_NODE_ID 4
    //#define MY_NODE_TYPE "NODE"
    //#define CHILD_ID 1   // Id of the sensor child
    #include <SPI.h>
    #include <MySensors.h>
    #include <Wire.h>
    //pr1:===== FOTA =====
    #define MY_OTA_FLASH_SS (8)
    #define MY_OTA_FLASH_JDECID (0xBF26)  //Use (0x00) if unknown.
    //pr2: ===== tempo non bloquante =====
    const unsigned long BLINK_INTERVAL = 1000;// Nombre de millisecondes entre deux changements d'├ętat de la LED
    unsigned long previousMillis = 0;// Pr├ęc├ędente valeur de millis()
    byte ledState = LOW;// Pr├ęc├ędent ├ętat de la LED
    //=              BEFORE              =
    void before()
    } //FIN de before
    //=              SETUP              =
    void setup() {//pas besoin de Serial.begin(115200)
      pinMode(LED_BUILTIN, OUTPUT);// Configure la broche de la LED en sortie
      digitalWrite(LED_BUILTIN, ledState);  // Configure l'├ętat initial de la LED
    }//FIN du SETUP
    //=              PRESENTATION              =
    void presentation() {
      // Send the sketch version information to the gateway and controller
      sendSketchInfo("led fota", "1.0");
    //=              LOOP               =
    void loop() {
      unsigned long currentMillis = millis(); // R├ęcup├ęre la valeur actuelle de millis()
      if (currentMillis - previousMillis >= BLINK_INTERVAL) // Si BLINK_INTERVAL ou plus millisecondes se sont ├ęcoul├ęs
      { previousMillis = currentMillis;    // Garde en m├ęmoire la valeur actuelle de millis()
        ledState = !ledState; // Inverse l'├ętat de la LED
        digitalWrite(LED_BUILTIN, ledState); Serial.print("LED  "); Serial.println(ledState);
    }// FIN de LOOP
    • the led is flashing well and MYController sees the node

    • I change the flashing delay from 1000 to 500 and the version which goes from 1.0 to 1.1. I compile the sketch which gives me: moteino_MySensors_fota_pr1.ino.hex

    • I go to Utilities>>Firmware and add a Type, Version 1.1 and Firmware (with faster flashing delay)

    • I go back to Resources>>nodes and upload the firmware of this node n┬░4

    • and ...nothing after 7 minutes

    Any Idea ? My Sketch is wrong ?

  • @superninja you can see some staus on the node page. also on the Status >> Resource logs, you can see some messages. Enable Settings >> System >> MyController >> Resources logs level to notice or debug.

    also try #define MY_OTA_FLASH_JDECID 0x00, which works for me.

  • @jkandasa Thank you for your help: I summarize what you asked me to do and which works now:
    The (minimum) equipment to test FOTA: I have a ATMega 328p BareBones (8MHz internal) + led attached to PB1 (pin15)+ SPI Flash memory + 3.3v regulator + RFM69HCW.

    • Install ArduinoISP program to ProMini (Programmer)
    • Connect MySensors board on ProMini (ArduinoISP) via ISP header
    • Select, Programmer="Arduino as ISP", Board:"Sensbender Micro", Processor:"Atmega 328 8Mhz"
    • Now click on "Burn Bootloader". bootloader will be loaded on MySensors board
    • Remove ISP header and remove ProMini from your computer
    • Connect MySensors board to USB via FTDI connector
    • Upload MySensors sketch(OTA should be enabled on the sketch) to MySensors board
    • Now the MySensors node will appear in MyController server.
    • Modify the MySensors sketch and upload it to MyController
    • Now trigger "Firmware upload" from MyController server page.

    This is the first sketch to upload one time with the USB to FTDI connector :

    //pr1: minimal sketch for fota with blink led
    #define blinkTime 200  
    #define SKETCH_NAME "SensBender Led 200 -70"  //25 caracteres max
    #define SKETCH_VERSION "pr1"
    //===== RFM config =====
    // Enable and select radio type attached
    #define   MY_RADIO_RFM69
    //#define   MY_DEBUG_VERBOSE_RFM69
    #define   MY_RFM69_NEW_DRIVER
    //#define MY_RFM69_ATC_MODE_DISABLED
    #define MY_RFM69_ATC_TARGET_RSSI_DBM (-70)  // target RSSI -70dBm//BUG
    //#define MY_RFM69_MAX_POWER_LEVEL_DBM (20)   // max. TX power 10dBm = 10mW//MARCHE
    #define   MY_RFM69_FREQUENCY (RFM69_868MHZ)
    #define   MY_IS_RFM69HW //with H(CW)
    //#define   MY_RFM69HW (true)
    //#define   MY_RFM69_NETWORKID (100)
    //#define MY_RFM69_BITRATE_MSB (RFM69_BITRATEMSB_1200)
    //#define MY_RFM69_BITRATE_LSB (RFM69_BITRATELSB_1200)
    // Enable repeater functionality for this node
    #define MY_DEBUG
    //===== LED =====
    #define LED_BUILTIN 9       //pb1 pin15
    //===== This Node ID =====
    #define MY_NODE_ID 0x02
    //===== Enable OTA feature =====
    #define MY_OTA_FLASH_SS (8)       //pb0 pin14
    #define MY_OTA_FLASH_JDECID 0x00  //0x00 if you don't know
    #include <MySensors.h>
    //=              SETUP              =
    void setup() {//pas besoin de Serial.begin(115200)
      pinMode(LED_BUILTIN, OUTPUT);
      Serial.print("Start "); Serial.print(SKETCH_NAME); Serial.print(" "); Serial.println(SKETCH_VERSION);
    }//FIN du SETUP
    //=              PRESENTATION              =
    void presentation() {
      // Send the sketch version information to the gateway and controller
      sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
    //=              LOOP               =
    void loop() {
      digitalWrite(LED_BUILTIN, HIGH);  Serial.print("LED ON ");
      digitalWrite(LED_BUILTIN, LOW);  Serial.println("LED OFF ");
    }// FIN de LOOP

    Change blinkTime time and compil the sketch , then upload firmware .hex with MYCONTROLLER.

Suggested Topics