FHEM und Arduino Nano -Hat jemand Erfahrung?

Begonnen von Warlock_2016, 13 Februar 2016, 23:59:18

Vorheriges Thema - Nächstes Thema

Warlock_2016

Hallo Zusammen
ich habe mir einen Arduino Nano zugelegt. Um es für FHEM einsetzen zu können, bin ich folgender Anleitung gefolgt wo es super erklärt wird.

http://www.meintechblog.de/2015/08/selbstbau-sensoren-im-smart-home-mit-fhem-nutzen-ein-guide-fuer-einsteiger/

Hier habe ich mir die Firmware runtergelassen:

Firmware "Configurable Firmata" (Zip-Datei) herunterladen: Download aus dem Github

Wenn ich die abgeänderte Version mit der Arduino Software Flashen möchte bekomme ich wieder eine Fehler anzeigt.

Der Sketch ist zu gross., bitte die Grosse verringern.

Hats jemand Erfahrung mit Arduino NANO und FHEM bzw was verwendet ihr für ein Board?

Ich  glaube der Speicher des NANO ist zu klein dafür.

Gruss, Markus

viegener

Auf dem im Blog erwähnten Uno ist eigentlich derselbe Prozessortyp wie auf dem Nano verwendet, so dass normalerweise beide dieselbe Software unterstützen.

Fragen:
- Hast Du das richtige Board vor dem kompilieren eingestellt?
- Welche IDE-version verwendest Du (Wenn es Probleme gibt, ist manchmal eine etwas ältere Version besser)
- Viele Einstellungen in der Firmware wirken sich auf die Grösse aus und insbesondere die Netzwerkteile aus

Vielleicht hilft Dir ja auch das:

http://forum.fhem.de/index.php/topic,15780.msg105906/topicseen.html#msg105906
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können

Wzut

Zitat von: Warlock_2016 am 13 Februar 2016, 23:59:18
Ich  glaube der Speicher des NANO ist zu klein dafür.
das ist er bei UNO / NANO immer wenn man alles  drin läßt. Kommentiere aus was du jetzt nicht brauchst bzw. fange klein an und nimm Stück für Stück ein Modul dazu.
Der größte Speicherfresser ist UIP Ethernet Lib, die für den WS5100 ist da wesentlich bescheidener.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Warlock_2016

#3
Hallo Zusammen,

Wenn ich beispielsweise die Datei

#include <spi.h> und
#include <ethernet.h>

auskommentiere, kann ich die Datei hochladen.

In der Anleitung steht aber drinnen:
...
Hierzu den folgenden Code entweder einfügen oder entsprechend abändern.
Einerseits müssen die auskommentierten "inlcudes" von Ethernet und SPI "aktiviert" werden (Zeile 40/41).
#include <SPI.h>
#include <Ethernet.h>
...

Welche Includes sind sind minimum Pflicht, damit ich den Nano über FHEM steuern kann?

Ich bin hier strickt der Anleitung von der Seite gefolgt.  8)

Gruss, Markus


__________________________________________

/*
* Firmata is a generic protocol for communicating with microcontrollers
* from software on a host computer. It is intended to work with
* any host computer software package.
*
* To download a host software package, please click on the following link
* to open the download page in your default browser.
*
* http://firmata.org/wiki/Download
*/

/*
  Copyright (C) 2006-2008 Hans-Christoph Steiner.  All rights reserved.
  Copyright (C) 2010-2011 Paul Stoffregen.  All rights reserved.
  Copyright (C) 2009 Shigeru Kobayashi.  All rights reserved.
  Copyright (C) 2009-2013 Jeff Hoefs.  All rights reserved.
  Copyright (C) 2013 Norbert Truchsess. All rights reserved.
  Copyright (C) 2014 Nicolas Panel. All rights reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  See file LICENSE.txt for further informations on licensing terms.

  formatted using the GNU C formatting and indenting
*/


#include <Firmata.h>

/*
* by default Firmata uses the Serial-port (over USB) of Arduino.
* ConfigurableFirmata may also comunicate over ethernet using tcp/ip.
* To configure this 'Network Firmata' to use the original WIZ5100-based
* ethernet-shield or Arduino Ethernet uncomment the includes of 'SPI.h' and 'Ethernet.h':
*/

//#include <SPI.h>
//#include <Ethernet.h>

/*
* To configure 'Network Firmata' to use an ENC28J60 based board include
* 'UIPEthernet.h' (no SPI.h required). The UIPEthernet-library can be downloaded
* from: https://github.com/ntruchsess/arduino_uip
*/

//#include <UIPEthernet.h>

/*
* To execute Network Firmata on Yun uncomment Bridge.h and YunClient.h.
* Do not include Ethernet.h or SPI.h in this case.
* On Yun there's no need to configure local_ip and mac in the sketch
* as this is configured on the linux-side of Yun.
*/

//#include <Bridge.h>
//#include <YunClient.h>

#if defined ethernet_h || defined UIPETHERNET_H || defined _YUN_CLIENT_H_
/*==============================================================================
* Network configuration for Network Firmata
*============================================================================*/
#define NETWORK_FIRMATA
//replace with ip of server you want to connect to, comment out if using 'remote_host'
#define remote_ip IPAddress(192,168,0,1)
//replace with hostname of server you want to connect to, comment out if using 'remote_ip'
#define remote_host "server.local"
//replace with the port that your server is listening on
#define remote_port 3030
//replace with arduinos ip-address. Comment out if Ethernet-startup should use dhcp. Is ignored on Yun
#define local_ip IPAddress(192,168,0,6)
//replace with ethernet shield mac. It's mandatory every device is assigned a unique mac. Is ignored on Yun
const byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x07, 0x02};
#endif

// To configure, save this file to your working directory so you can edit it
// then comment out the include and declaration for any features that you do
// not need below.

// Also note that the current compile size for an Arduino Uno with all of the
// following features enabled is about 22.4k. If you are using an older Arduino
// or other microcontroller with less memory you will not be able to include
// all of the following feature classes.

#include <utility/DigitalInputFirmata.h>
DigitalInputFirmata digitalInput;

#include <utility/DigitalOutputFirmata.h>
DigitalOutputFirmata digitalOutput;

#include <utility/AnalogInputFirmata.h>
AnalogInputFirmata analogInput;

#include <utility/AnalogOutputFirmata.h>
AnalogOutputFirmata analogOutput;

#include <Servo.h> //wouldn't load from ServoFirmata.h in Arduino1.0.3
#include <utility/ServoFirmata.h>
ServoFirmata servo;

#include <Wire.h> //wouldn't load from I2CFirmata.h in Arduino1.0.3
#include <utility/I2CFirmata.h>
I2CFirmata i2c;

#include <utility/OneWireFirmata.h>
OneWireFirmata oneWire;

#include <utility/StepperFirmata.h>
StepperFirmata stepper;

#include <utility/FirmataExt.h>
FirmataExt firmataExt;

#include <utility/FirmataScheduler.h>
FirmataScheduler scheduler;

#include <utility/EncoderFirmata.h>
EncoderFirmata encoder;


// dependencies. Do not comment out the following lines
#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
#include <utility/AnalogWrite.h>
#endif

#if defined AnalogInputFirmata_h || defined I2CFirmata_h || defined EncoderFirmata_h
#include <utility/FirmataReporting.h>
FirmataReporting reporting;
#endif

// dependencies for Network Firmata. Do not comment out.
#ifdef NETWORK_FIRMATA
#if defined remote_ip && defined remote_host
#error "cannot define both remote_ip and remote_host at the same time!"
#endif
#include <utility/EthernetClientStream.h>
#ifdef _YUN_CLIENT_H_
YunClient client;
#else
EthernetClient client;
#endif
#if defined remote_ip && !defined remote_host
#ifdef local_ip
EthernetClientStream stream(client, local_ip, remote_ip, NULL, remote_port);
#else
EthernetClientStream stream(client, IPAddress(0, 0, 0, 0), remote_ip, NULL, remote_port);
#endif
#endif
#if !defined remote_ip && defined remote_host
#ifdef local_ip
EthernetClientStream stream(client, local_ip, IPAddress(0, 0, 0, 0), remote_host, remote_port);
#else
EthernetClientStream stream(client, IPAddress(0, 0, 0, 0), IPAddress(0, 0, 0, 0), remote_host, remote_port);
#endif
#endif
#endif

/*==============================================================================
* FUNCTIONS
*============================================================================*/

void systemResetCallback()
{
  // initialize a defalt state

  // pins with analog capability default to analog input
  // otherwise, pins default to digital output
  for (byte i = 0; i < TOTAL_PINS; i++) {
    if (IS_PIN_ANALOG(i)) {
#ifdef AnalogInputFirmata_h
      // turns off pullup, configures everything
      Firmata.setPinMode(i, ANALOG);
#endif
    } else if (IS_PIN_DIGITAL(i)) {
#ifdef DigitalOutputFirmata_h
      // sets the output to 0, configures portConfigInputs
      Firmata.setPinMode(i, OUTPUT);
#endif
    }
  }

#ifdef FirmataExt_h
  firmataExt.reset();
#endif
}

/*==============================================================================
* SETUP()
*============================================================================*/

void setup()
{
#ifdef NETWORK_FIRMATA
#ifdef _YUN_CLIENT_H_
  Bridge.begin();
#else
#ifdef local_ip
  Ethernet.begin((uint8_t *)mac, local_ip); //start ethernet
#else
  Ethernet.begin((uint8_t *)mac); //start ethernet using dhcp
#endif
#endif
  delay(1000);
#endif
  Firmata.setFirmwareVersion(FIRMATA_MAJOR_VERSION, FIRMATA_MINOR_VERSION);

#if defined AnalogOutputFirmata_h || defined ServoFirmata_h
  /* analogWriteCallback is declared in AnalogWrite.h */
  Firmata.attach(ANALOG_MESSAGE, analogWriteCallback);
#endif

#ifdef FirmataExt_h
#ifdef DigitalInputFirmata_h
  firmataExt.addFeature(digitalInput);
#endif
#ifdef DigitalOutputFirmata_h
  firmataExt.addFeature(digitalOutput);
#endif
#ifdef AnalogInputFirmata_h
  firmataExt.addFeature(analogInput);
#endif
#ifdef AnalogOutputFirmata_h
  firmataExt.addFeature(analogOutput);
#endif
#ifdef ServoFirmata_h
  firmataExt.addFeature(servo);
#endif
#ifdef I2CFirmata_h
  firmataExt.addFeature(i2c);
#endif
#ifdef OneWireFirmata_h
  firmataExt.addFeature(oneWire);
#endif
#ifdef StepperFirmata_h
  firmataExt.addFeature(stepper);
#endif
#ifdef FirmataReporting_h
  firmataExt.addFeature(reporting);
#endif
#ifdef FirmataScheduler_h
  firmataExt.addFeature(scheduler);
#endif
#ifdef EncoderFirmata_h
  firmataExt.addFeature(encoder);
#endif
#endif
  /* systemResetCallback is declared here (in ConfigurableFirmata.ino) */
  Firmata.attach(SYSTEM_RESET, systemResetCallback);

  // Network Firmata communicates with Ethernet-shields over SPI. Therefor all
  // SPI-pins must be set to IGNORE. Otherwise Firmata would break SPI-communication.
  // add Pin 10 and configure pin 53 as output if using a MEGA with Ethernetshield.
  // No need to ignore pin 10 on MEGA with ENC28J60, as here pin 53 should be connected to SS:
#ifdef NETWORK_FIRMATA
  // ignore SPI and pin 4 that is SS for SD-Card on Ethernet-shield
  for (byte i = 0; i < TOTAL_PINS; i++) {
    if (IS_PIN_SPI(i)
        || 4 == i
        // || 10==i //explicitly ignore pin 10 on MEGA as 53 is hardware-SS but Ethernet-shield uses pin 10 for SS
       ) {
      Firmata.setPinMode(i, IGNORE);
    }
  }
  //  pinMode(PIN_TO_DIGITAL(53), OUTPUT); configure hardware-SS as output on MEGA
  pinMode(PIN_TO_DIGITAL(4), OUTPUT); // switch off SD-card bypassing Firmata
  digitalWrite(PIN_TO_DIGITAL(4), HIGH); // SS is active low;

  // start up Network Firmata:
  Firmata.begin(stream);
#else
  // start up the default Firmata using Serial interface:
  Firmata.begin(57600);
#endif
  systemResetCallback();  // reset to default config
}

/*==============================================================================
* LOOP()
*============================================================================*/
void loop()
{
#ifdef DigitalInputFirmata_h
  /* DIGITALREAD - as fast as possible, check for changes and output them to the
   * stream buffer using Firmata.write()  */
  digitalInput.report();
#endif

  /* STREAMREAD - processing incoming messagse as soon as possible, while still
   * checking digital inputs.  */
  while (Firmata.available()) {
    Firmata.processInput();
#ifdef FirmataScheduler_h
    if (!Firmata.isParsingMessage()) {
      goto runtasks;
    }
  }
  if (!Firmata.isParsingMessage()) {
runtasks: scheduler.runTasks();
#endif
  }

  /* SEND STREAM WRITE BUFFER - TO DO: make sure that the stream buffer doesn't go over
   * 60 bytes. use a timer to sending an event character every 4 ms to
   * trigger the buffer to dump. */

#ifdef FirmataReporting_h
  if (reporting.elapsed()) {
#ifdef AnalogInputFirmata_h
    /* ANALOGREAD - do all analogReads() at the configured sampling interval */
    analogInput.report();
#endif
#ifdef I2CFirmata_h
    // report i2c data for all device with read continuous mode enabled
    i2c.report();
#endif
#ifdef EncoderFirmata_h
    // report encoders positions if reporting enabled.
    encoder.report();
#endif
  }
#endif
#ifdef StepperFirmata_h
  stepper.update();
#endif
#if defined NETWORK_FIRMATA && !defined local_ip &&!defined _YUN_CLIENT_H_
  if (Ethernet.maintain())
  {
    stream.maintain(Ethernet.localIP());
  }
#endif
}

Wzut

1. Verwende bitte Code Tags (die Reihe über den Smilies der Knopf mit dem # )
2. Verrate uns doch mal was du überhaupt machen willst, dann kann man dir auch helfen was du unbedingt brauchst :
- Anbindung an fhem via USB oder Ethernet , wenn Ethernet welcher Chip ?
- digitale Ein und Ausgänge ?
- OneWire ?
- usw. usw
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Warlock_2016

Hi Wzut

du hast absolut Recht:)

Ich verwende FHME mit dem Fokus meine Aktoren und Sensoren im Haus anzusteuern. Alles funktioniert soweit i.O. Als System habe ich Homematik im Einsatz.
Das FHEM läuft auf einem RaspberryPI2 Server, welcher bei mit im Haushaltsraum steht. Dieser Sever ist per LAN Kabel verbunden.
Auf dem Raspberry habe ich einen stapelbarer CC1101 Transceiver für Raspberry Pi draufgesteckt der Fa. Busware der im 868 MHz Bereich senden kann.

http://shop.busware.de/product_info.php/cPath/1/products_id/97?osCsid=f8c5788c687e3bd4bc7e13895ab749b2

Ich möchte aber gerne zusätzlich meine Rollladen steuern , wenn möglich Somfy und Warema. Hier habe ich im Forum gelesen und auf der obigen Seite (link), dass dies funktioniert würde über einen Nano mit dieser Firmware. Dieser Nano ist am USB Port des Raspberry verbunden bzw. das ist die Idee dahinter, damit es kompakter wird.

Hier bin nach folgender Seite vorgegangen:

http://www.fhemwiki.de/wiki/FHEMduino

Gemäss der Anleitung habe ich an den Nano einen Empfänger + Receiver  (433 MHz) ran gelötet.

Es war auch meine Frage:

Ist es überhaupt die System Architektur (Nano und Raspberry) oder brauche ich noch was anderes?
Geht überhaupt die Kommunikation über USB an den Nano? Wie kommunizieren dann beide? Über USB Port, denke ich, da der NANA kein LAN Anschluss hat, oder?
Wenn ja, welche Firmwareänderung brauche ich überhaupt quasi Includes, damit das Sketch minimal bleibt?
Wie kann man nachher den Rolladen anlernen? Heute habe ich Funksender :)

Gruss, Markus

Wzut

Sorry, aber ich blicke nun gar nicht mehr durch, in deinem ersten Post schreibst du Firmata und nun soll es FHEMduino sein ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Warlock_2016

Hallo Zusammen

ich habe einen Nano Uno mit USB.
Aber gemäss WIKI, ist der Duino ein Low-Cost CUL-Klon der auf einem Arduino Nano basiert. Er wird mittels USB angeschlossen und ist primär dazu konzipiert, im 433MHz-Bereich zu arbeiten was ich auch gemäss der Anleitung benötigt, damit ich die Rolladen schalten kann. die Rollenden (Fa. https://www.somfy.de) arbeiten mit einem RTS Protokoll.
Die zwei Sensoren habe ich bei Amazon bestellt und gemäss der Anleitung an den Nano angebracht bzw. angelötet --> siehe Schaltplan..

Der Nano ist wie oben erklärt per USB an den Raspberry angeschlossen.

Markus




Puschel74

@Warlock
Da die Frage nichts mit FHEM zu tun hat - verschieb doch bitte in die Bastel-Ecke.
Dort ist deine Frage besser aufgehoben.
Danke.
Und bearbeite deinen Beitrag von gestern doch nochmal und füge die Tags ein.
Unsere Augen werden es dir danken.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

viegener

Zitat von: Warlock_2016 am 15 Februar 2016, 11:17:21
Hallo Zusammen

ich habe einen Nano Uno mit USB.
Aber gemäss WIKI, ist der Duino ein Low-Cost CUL-Klon der auf einem Arduino Nano basiert. Er wird mittels USB angeschlossen und ist primär dazu konzipiert, im 433MHz-Bereich zu arbeiten was ich auch gemäss der Anleitung benötigt, damit ich die Rolladen schalten kann. die Rollenden (Fa. https://www.somfy.de) arbeiten mit einem RTS Protokoll.
Die zwei Sensoren habe ich bei Amazon bestellt und gemäss der Anleitung an den Nano angebracht bzw. angelötet --> siehe Schaltplan..

Der Nano ist wie oben erklärt per USB an den Raspberry angeschlossen.

Markus

Sorry ich befürchte hier geht ganz viel durcheinander.

Ich versuche mal den Anfang zu entwirren, dann können wir ja mal weiterschauen:

Firmata, CUL, FHEMDuino sind sehr verschiedene Konzepte, die eigentlich erst mal nur eines gemeinsam haben Arduinos/AVR-Mikorcontroller und Funk(-module). Das heisst aber nicht dass diese austauschbar sind.

Also Firmata erlaubt es eigene Sensoren zu bauen und die Sofwareentwicklung dafür relativ einfach zu halten. Hat aber erst mal nichts mit Somfy zu tun.

CUL ist der Sammelbegriff für die FHEM-Standard-Transceiver (Basierend auf dem cc1101 Funkmodul). Es gibt sehr verschiedene Hardwarevarianten und auch die Möglichkeit einen NanoCUL mit einem Arduino selbst zu bauen. Darauf läuft die culfw (und die Variante a-culfw). Mit dem CUL ist es möglich Somfy-RTS (!) zu steuern (senden) aber NICHT Somfy-Fernbedienungen zu empfangen.

FHEMDuino ist ein Modul um verschiedene Signale zu senden und zu empfangen. Es verwendet sehr einfache Funkmodule. Damit kann man Somfy-Signale empfangen (aber nicht senden).

Wenn es um Somfy geht, lies in den verschiedenen Somfy-Threads (vielleicht auch in dem wo Du dazu bereits gepostet hast).

Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können