Integracja Arduino Mega + Ethernet Shield z HA przez MQTT

Tak Arduino IDE 1.8.12

avrdude: Version 6.3-20190619
Copyright © 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright © 2007-2014 Joerg Wunsch

     System wide configuration file is "C:\Users\Pavel\Desktop\pi4 HA\arduino-1.8.12\hardware\tools\avr/etc/avrdude.conf"

     Using Port                    : COM4
     Using Programmer              : wiring
     Overriding Baud Rate          : 115200
     AVR Part                      : ATmega2560
     Chip Erase delay              : 9000 us
     PAGEL                         : PD7
     BS2                           : PA0
     RESET disposition             : dedicated
     RETRY pulse                   : SCK
     serial program mode           : yes
     parallel program mode         : yes
     Timeout                       : 200
     StabDelay                     : 100
     CmdexeDelay                   : 25
     SyncLoops                     : 32
     ByteDelay                     : 0
     PollIndex                     : 3
     PollValue                     : 0x53
     Memory Detail                 :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom        65    10     8    0 no       4096    8      0  9000  9000 0x00 0x00
       flash         65    10   256    0 yes    262144  256   1024  4500  4500 0x00 0x00
       lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

     Programmer Type : Wiring
     Description     : Wiring
     Programmer Model: AVRISP
     Hardware Version: 15
     Firmware Version Master : 2.10
     Vtarget         : 0.0 V
     SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9801 (probably m2560)
avrdude: reading input file “C:\Users\Pavel\AppData\Local\Temp\arduino_build_706444/o_wietlenie_2.ino.hex”
avrdude: writing flash (18404 bytes):

Writing | ################################################## | 100% 2.73s

avrdude: 18404 bytes of flash written
avrdude: verifying flash memory against C:\Users\Pavel\AppData\Local\Temp\arduino_build_706444/o_wietlenie_2.ino.hex:
avrdude: load data flash data from input file C:\Users\Pavel\AppData\Local\Temp\arduino_build_706444/o_wietlenie_2.ino.hex:
avrdude: input file C:\Users\Pavel\AppData\Local\Temp\arduino_build_706444/o_wietlenie_2.ino.hex contains 18404 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 2.09s

avrdude: verifying …
avrdude: 18404 bytes of flash verified

avrdude done. Thank you.

Daj link do githuba na twój kod
Przy kompilacji twojego kodu:

Jest w tym wątku przecież https://github.com/ironek69/Arduino-to-Home-Assistant-MQTT-multisensor

Źle skopiowałeś, początek powinien być zakomentowany /* xxx */
najlepiej z Githuba pobrać całość.

Nie wiem skąd ten avrdude: u mnie nic takiego nie ma w Arduino IDE…

W Managerze płytek masz to zainstalowane:

Tak mam to zainstalowane.
Przy kompilacji twojego kodu ma problem z ta linijką : RS485_protocol.h: No such file or directory

Wszystko jest napisane co trzeba zrobić - doinstalować bibliotekę RS485_protocol.

http://www.gammon.com.au/Arduino/RS485_protocol.zip

Wgrałem twój szkic. Ale w configuration.yaml w HA co mam wpisać

Skrypt używa autodiscovery więc teoretycznie nic nie trzeba dodawać do konfiguracji bo sensory powinny automatycznie pojawić się w HA w zakładce Wszystkie czujniki.

Tak mi się wydawało ale w żaden sposób u mnie to nie działa. Jedyny szkic który u mnie dział to ten udostępnia przez szmalu pod filmem “sterowanie oświetleniem” No ale sterowanie przez domoticza mnie nie urządza. No trudno kasa wywalona w błoto.

Ja bym się nie poddawał :slight_smile: Sprawdź czy cokolwiek jest zapisywane do brokera MQTT bo może tutaj masz problem… masz MQTT Explorer trzeba sprawdzić czy dane są zapisywane. Nawet jak nie działa autodiscovery to zawsze można w konfigu ręcznie dodać sensory i sprawdzić czy zapisują się odczyty.

Bez sensu sprawdzać jakieś mqtt jak zwykły przycisk fizyczny nie działa.
Nie da się jakoś do tego scryptu dorobić mqtt i ethernet shield?

// Enable debug prints to serial monitor
#define MY_DEBUG 


// Enable and select radio type attached
//#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69

// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level. 
//#define MY_RF24_PA_LEVEL RF24_PA_LOW

// Enable serial gateway
#define MY_GATEWAY_SERIAL

// Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L
#define MY_BAUD_RATE 38400
#endif

// Flash leds on rx/tx/err
// #define MY_LEDS_BLINKING_FEATURE
// Set blinking period
// #define MY_DEFAULT_LED_BLINK_PERIOD 300

// Inverses the behavior of leds
// #define MY_WITH_LEDS_BLINKING_INVERSE

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
#define MY_INCLUSION_BUTTON_FEATURE

// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP

// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60 
// Digital pin used for inclusion mode button
#define MY_INCLUSION_MODE_BUTTON_PIN  3 

// Uncomment to override default HW configurations
//#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
//#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED

#include <SPI.h>
#include <MySensors.h>  
#include <Bounce2.h>

// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE


#define RELAY_1  4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define RELAY_2  5
#define NUMBER_OF_RELAYS 2 // Total number of attached relays
#define RELAY_ON 1  // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay

#define BUTTON_PIN A1
#define BUTTON2_PIN A2


void before() { 
  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
    // Then set relay pins in output mode
    pinMode(pin, OUTPUT);   
    // Set relay to last known state (using eeprom storage) 
    digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
  }
}
Bounce debouncer = Bounce();
Bounce debouncer2 = Bounce();

void setup() { 
  // Setup locally attached sensors
  delay(10000);
   // Setup the button.
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(BUTTON2_PIN, INPUT_PULLUP);
  // After setting up the button, setup debouncer.
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5);
  debouncer2.attach(BUTTON2_PIN);
  debouncer2.interval(5);

  //presentation();
}
void presentation()  
{   
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("Relay", "1.0");

  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    present(sensor, S_LIGHT);
  }
}

MyMessage msg(1, V_LIGHT);
MyMessage msg2(2, V_LIGHT);

void loop() { 
  // Send locally attached sensor data here 
  if (debouncer.update()) {
    // Get the update value.
    int value = debouncer.read();
    // Send in the new value.
    if(value == LOW){
         saveState(1, !loadState(1));
         digitalWrite(RELAY_1, loadState(1)?RELAY_ON:RELAY_OFF);
         send(msg.set(loadState(1)));
         }
  }
  if (debouncer2.update()) {
      int value2 = debouncer2.read();
    if(value2 == LOW){
         saveState(2, !loadState(2));
         digitalWrite(RELAY_2, loadState(2)?RELAY_ON:RELAY_OFF);
         send(msg2.set(loadState(2)));
         }
  }
}


void receive(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type==V_LIGHT) {
     // Change relay state
     digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     saveState(message.sensor, message.getBool());
     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   } 

W tym przynajmniej przyciski fizyczne działają

Zerknij na to może problem tkwi w tym że gość to pokazuję na przykładzie arduino uno dlatego mi to nie działa ? Może jakieś inne piny muszę przypisać.

Nie wiem czy zwróciłeś uwagę, że tutaj używa się przycisków podpiętych pod piny analogowe.
w setupie stosuje się coś jak rezystor podciągający.

 pinMode(BUTTON_PIN, INPUT_PULLUP);
 pinMode(BUTTON2_PIN, INPUT_PULLUP);

z tego co wiem to chcesz użyć 16 przycisków ? Arduino Mega ma dokładnie 16 wejść analogowych więc można to zrobić w ten sposób. Są jeszcze sposoby na ogarnięcie np. większej ilości przycisków na jednym pinie analogowym. Nie wiem tylko jak to się ma do zakłóceń i pojawieniu się obcych napięć na przewodach a co za tym idzie na wejściach analogowych Arduino…
Dlatego ja stosowałem wejścia cyfrowe. Jak będę miał czas to zajmę się takim właśnie projektem bo tak jak pisałem docelowo też tak planuję zrobić u siebie.

Na szkicu od Szmala działa bez rezystora… Ty chciałeś zrobić na przkaznikach bistabilnych i ten gość od którego mam szkic z YT też zrobił to na bistabilnych

Dokładnie ja nie widzę innego sensownego rozwiązania jak przekaźniki bistabilne i przyciski w pomieszczeniach.

No właśnie nie bo komenda pinMode(BUTTON_PIN, INPUT_PULLUP); to właśnie zastępuje rezystor podciągający.

Czy Arduino jest aż tak zawodne że chcesz w ten sposób zrobić?

Nie jest zawodne u mnie od kilku miesięcy sprawuje się wzorowo zarówno Mega jak Nano, ale to tylko urządzenia i kto je wymieni jak np. mnie nie będzie w domu ? Unieruchomi to całe oświetlenie w domu.

Można by powiedzieć że ogarnołem wstępnie temat. Wszystko masz po mqtt przez eth shield czy masz też jakieś Arduino po usb

@Iron chcę na końcu ogrodu postawić skrzynkę sterowniczą. Sterowanie oświetleniem ogrodu, basenem, gniazdo do kosiarki, przyciski mono, kilka ds-ów i takie tam. Nie łapie już tam wifi potrzebuję coś po kablu. Chciałem postawić Esp32 z EspHome w garazu i po skrętce puścić sterowanie do skrzynki, ale jedna skrętka będzie za mało. Przypomniałem sobie o Twoim projekcie i wydaje się on idealny dla mojego rozwiązania. Pytanie czy w skrzynce wstawić Arduino Mega czy Uno, a Mega w garażu, gdzie mam już router? Ps. Widziałem, że jest coś takiego jak mysensors. Czy to się czymś różni od Twojego projektu?

Trochę zaśmieciłem temat. Pokasuj nie potrzebne wpisy i zostaw sam projekt.