SIGNALduino Compilieren: Unterschied zwischen den Versionen

Aus FHEMWiki
KKeine Bearbeitungszusammenfassung
K (veraltete "source"-Angaben in "syntaxhighlight" geändert)
 
(6 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 8: Zeile 8:
* Die Datei <code>RF_Receiver.ino</code> in einen Ordner <code>RF_Receiver</code>, am besten direkt ins <code>Arduino</code> Verzeichnis der IDE kopieren.
* Die Datei <code>RF_Receiver.ino</code> in einen Ordner <code>RF_Receiver</code>, am besten direkt ins <code>Arduino</code> Verzeichnis der IDE kopieren.
* Im <code>libraries</code> Ordner der Arduino IDE am besten einen Ordner mit Namen <code>SIGNALduino</code> anlegen, dort müssen dann die Dateien <code>bitstore</code>, <code>output</code>, <code>signalDecoder</code>, <code>SimpleFIFO</code> und <code>TimerOne</code> (jeweils <code>.cpp</code> und <code>.h</code> Datei) abgelegt werden.
* Im <code>libraries</code> Ordner der Arduino IDE am besten einen Ordner mit Namen <code>SIGNALduino</code> anlegen, dort müssen dann die Dateien <code>bitstore</code>, <code>output</code>, <code>signalDecoder</code>, <code>SimpleFIFO</code> und <code>TimerOne</code> (jeweils <code>.cpp</code> und <code>.h</code> Datei) abgelegt werden.
* Im diesem <code>SIGNALduino</code> Verzeichnis ist dann noch ein Unterverzeichnis <code>config</code> anzulegen, dort muss die Datei <code>known_16bit_timers.h</code> abgelegt werden.
* In diesem <code>SIGNALduino</code> Verzeichnis ist dann noch ein Unterverzeichnis <code>config</code> anzulegen, dort muss die Datei <code>known_16bit_timers.h</code> abgelegt werden.


Struktur der SIGNALduino libraries:[[Datei:SIGNALduino-ViaArduinoEnvironment.jpg]]
Struktur der SIGNALduino libraries:[[Datei:SIGNALduino-ViaArduinoEnvironment.jpg]]




In Der Arduino Entwicklungsumgebung unter <code>Werkzeuge</code> → <code>Board</code> <tt>'''"Arduino Nano"'''</tt> und unter <code>Werkzeuge</code> → <code>Prozessor</code> <tt>'''"ATmega328"'''</tt> angeben. Nach Einstecken des SIGNALduinos in die USB Buchse noch den entsprechenden <code>COM-Port</code> unter <code>Werkzeuge</code> → <code>Port</code> angeben, danach sollte sich der Scetch <code>RF_Receiver.ino</code> übersetzen und auf den SIGNALduino laden lassen.
In der Arduino Entwicklungsumgebung unter <code>Werkzeuge</code> → <code>Board</code> <tt>'''"Arduino Nano"'''</tt> und unter <code>Werkzeuge</code> → <code>Prozessor</code> <tt>'''"ATmega328"'''</tt> angeben. Nach Einstecken des SIGNALduinos in die USB Buchse noch den entsprechenden <code>COM-Port</code> unter <code>Werkzeuge</code> → <code>Port</code> angeben, danach sollte sich der Scetch <code>RF_Receiver.ino</code> übersetzen und auf den SIGNALduino laden lassen.


== SIGNALduino mit Makefile unter Linux ==
== SIGNALduino mit Makefile unter Linux ==
Zeile 19: Zeile 19:
Benötigt werden dazu:
Benötigt werden dazu:
* Der Cross-Compiler und alle Werkzeuge für Arduino bzw. AVR. Bei Ubuntu und Debian Systemen:
* Der Cross-Compiler und alle Werkzeuge für Arduino bzw. AVR. Bei Ubuntu und Debian Systemen:
<source lang=bash>
<syntaxhighlight lang=bash>
# Arduino pakete installieren:
# Arduino Pakete installieren:
sudo apt-get install arduino arduino-core arduino-mighty-1284p arduino-mk
sudo apt-get install arduino arduino-core arduino-mighty-1284p arduino-mk
# AVR
# AVR
Zeile 28: Zeile 28:
# Arduino-Makefile verwendet YAML und serialport in Perl
# Arduino-Makefile verwendet YAML und serialport in Perl
sudo apt-get libdevice-serialport-perl libyaml-perl
sudo apt-get libdevice-serialport-perl libyaml-perl
</source>
</syntaxhighlight>
In den Paketen sind die Arduino Quellen und Arduino-Makefile enthalten.
Bei wem das aber nicht klappt, der sollte wie hier beschrieben die neuesten Versionen verwenden.


* SIGNALDuino Quelltexte
* [https://github.com/RFD-FHEM/SIGNALDuino.git SIGNALDuino Quelltexte]
<source lang=bash>
<syntaxhighlight lang=bash>
# Hier kann man natürlich jedes beliebige Verzeichnis nehmen.
# Hier kann man natürlich jedes beliebige Verzeichnis nehmen.
mkdir -p ~/src/arduino; cd ~/src/arduino
mkdir -p ~/src/arduino; cd ~/src/arduino
# SIGNALDuino von github clonen
# SIGNALDuino von github clonen
git clone https://github.com/RFD-FHEM/SIGNALDuino.git
git clone https://github.com/RFD-FHEM/SIGNALDuino.git
</source>
</syntaxhighlight>


* Die Arduino Quellen (optional man kann auch die aus der Paketverwaltung verwenden)
* Die [https://www.arduino.cc/en/Main/Software Arduino Quellen] (optional)
<source lang=bash>
<syntaxhighlight lang=bash>
# siehe https://www.arduino.cc/en/Main/Software für neuste Version
# siehe https://www.arduino.cc/en/Main/Software für neueste Version
wget https://downloads.arduino.cc/arduino-1.8.5-linux64.tar.xz
wget https://downloads.arduino.cc/arduino-1.8.5-linux64.tar.xz
tar xvJf arduino-1.8.5-linux64.tar.xz
tar xvJf arduino-1.8.5-linux64.tar.xz
</source>
</syntaxhighlight>


* Die neuste Version Arduino-Makefile
* Die neueste Version Arduino-Makefile (optional)
<source lang=bash>
<syntaxhighlight lang=bash>
# Neuste Version von github clonen
# Neueste Version von github clonen
git clone https://github.com/sudar/Arduino-Makefile.git
git clone https://github.com/sudar/Arduino-Makefile.git
</source>
</syntaxhighlight>


Jetzt muss in <code>SIGNALDuino/RF_Receiver</code> noch ein <code>Makefile</code> erstellt werden:
Jetzt muss in <code>SIGNALDuino/RF_Receiver</code> noch ein <code>Makefile</code> erstellt werden:
<source lang=make>
<syntaxhighlight lang=make>
# Verzeichnis in dem die Arduino-Quellen liegen
# Verzeichnis in dem die Arduino-Quellen liegen
ARDUINO_DIR=$(HOME)/src/arduino/arduino-1.8.5
ARDUINO_DIR=$(HOME)/src/arduino/arduino-1.8.5
Zeile 60: Zeile 62:
AVR_TOOLS_DIR=/usr
AVR_TOOLS_DIR=/usr
AVRDUDE_OPTS = -v
AVRDUDE_OPTS = -v
# Ab Arduino 1.5 sollte man die Architektur angeben.
ARCHITECTURE  = avr
BOARD_TAG = nano
BOARD_TAG = nano
BOARD_SUB = atmega328
BOARD_SUB = atmega328
USER_LIB_PATH += $(realpath ../src/_micro-api/libraries)
USER_LIB_PATH += $(realpath ../src/_micro-api/libraries)
ARDUINO_LIBS += bitstore output signalDecoder SimpleFIFO TimerOne EEPROM  
ARDUINO_LIBS += bitstore output signalDecoder SimpleFIFO TimerOne EEPROM
# Device des Arduino nano
MONITOR_PORT  = /dev/ttyUSB0
# AVRDUDE      = /usr/bin/avrdude
AVRDUDE_CONF = /etc/avrdude.conf
include $(ARDMK_DIR)/Arduino.mk
include $(ARDMK_DIR)/Arduino.mk
</source>
</syntaxhighlight>
Wer die Arduino Quellen und Arduino-Makefile aus der Paketverwaltung verwenden möchte, kann folgendes ändern:
<syntaxhighlight lang=make>
ARDUINO_DIR=/usr/share/arduino
ARDMK_DIR=$(ARDUINO_DIR)
</syntaxhighlight>


Mit stand vom 17.02.2018 müssen jetzt noch ein paar kleine Fehler beseitigt werden:
Mit Stand vom 17.02.2018 müssen jetzt noch ein paar kleine Fehler beseitigt werden:
* <code>RF_Receiver/RF_Receiver.ino</code>
Präprozessor-Direktiven werden nicht mit Semikolon abgeschlossen
* in <code>RF_Receiver/RF_Receiver.ino</code>
:* <code>#define CMP_NEWSD</code> statt <code>#define CMP_NEWSD;</code>
:* <code>#define CMP_NEWSD</code> statt <code>#define CMP_NEWSD;</code>
* <code>src/_micro-api/libraries/output/src/output.h</code>
Linux unterscheidet Groß- und Kleinschreibung bei Dateien:
* <code>src/_micro-api/libraries/signalDecoder/src/signalDecoder.h</code>
* in <code>src/_micro-api/libraries/output/src/output.h</code>
* und in <code>src/_micro-api/libraries/signalDecoder/src/signalDecoder.h</code>
:* <code>  #include "Arduino.h"</code> statt <code>  #include "arduino.h"</code>
:* <code>  #include "Arduino.h"</code> statt <code>  #include "arduino.h"</code>
* in <code>src/_micro-api/libraries/signalDecoder</code> fehlt <code>library.properties</code>
Das Makefile ignoriert Bibliotheken ohne <code>library.properties</code>
:* <code>cd src/_micro-api/libraries/signalDecoder</code>
* in <code>src/_micro-api/libraries/signalDecoder</code> fehlt <code>library.properties</code>.
:* <code>cp ../bitstore/library.properties .</code>
<syntaxhighlight lang=bash>
:* <code>sed -i 's/bitstore/signalDecoder/g' library.properties</code>
cd src/_micro-api/libraries/signalDecoder
cp ../bitstore/library.properties .
sed -i 's/bitstore/signalDecoder/g' library.properties
</syntaxhighlight>


Danach kann SIGNALDuino für den Arduino Nano übersetzt werden:
Danach kann SIGNALDuino für den Arduino Nano übersetzt werden:
<source lang=bash>
<syntaxhighlight lang=bash>
cd RF_Receiver
cd RF_Receiver
make
make
AUfräumen mit
# Auf den Arduino laden (flashen)
make upload
# Aufräumen mit
make clean
make clean
</source>
</syntaxhighlight>
 
== SIGNALDuino konfigurieren und testen ==
[[Datei:Fhemduino_schematic.png|mini|FHEMduino bzw. SIGNALDuino Schaltplan]]
In der Datei <code>RF_Receiver.ino</code> sind u.a. folgende Einstellungen:
* <code>BAUDRATE</code> Die Datenrate mit der SIGNALDuino mit dem PC kommuniziert (Voreinstellung 57600). Man kann also z.B. mit <code>minicom -D /dev/ttyUSB0 -8 -b 57600</code> die Kommunikation testen.
* <code>PIN_LED</code> Der Pin an dem die LED zur Signalisierung von Nachrichten angeschlossen ist (Voreinstellung D13 = LED <code>L</code> auf dem Nano).
* <code>PIN_RECEIVE</code> Der Pin zum Empfang von Daten (Voreinstellung D2).
* <code>PIN_SEND</code> Der Pin zum Senden von Daten (Voreinstellung D11).
 
Öffnet man ein Terminal (z.B. <code>minicom</code> siehe oben) so kann man die Kommandoschnittstelle des SIGNALDuino probieren:
* Eingabe "<code>?</code> Enter" listet die verfügbaren Kommandos: ''Use one of V i R t X F S P C G''
:* <code>V</code>: Zeigt die Version der Software
:* <code>i</code>: Präfix für ein Intertechno-Kommando.
:* <code>R</code>: Zeigt den freien Arbeitsspeicher (RAM) in Bytes
:* <code>t</code>: Zeigt die Dauer des Betriebs seit dem letzten Start in Sekunden (uptime).
:* <code>XQ</code>: Empfänger abschalten (RX Quit)
:* <code>XE</code>: Empfänger einschalten (RX Enable)
:* <code>F</code>: Filter wechseln (derzeit ohne Funktion)
:* <code>S</code>: Präfix für das Aussenden von Nachrichten.
:* <code>P</code>: Prüft die Kommunikation (Ping). Antwortet mit "OK".
:* <code>CG</code>: Abfrage der Konfiguration (Config Get) aus dem EEPROM.
:* <code>CES</code>: Aktiviere Nachrichten mit Sync Puls (Config Enable Sync).
:* <code>CEC</code>: Aktiviere Nachrichten mit Manchester Code (Config Enable Manchester Code).
:* <code>CEU</code>: Aktiviere nicht synchronisierte Nachrichten (Config Enable Unsync).
:* <code>CD[SCU]</code>: Deaktivieren den entsprechenden Nachrichtentyp (z.B. <code>CDU</code> deaktiviert asynchron).
:* <code>G</code>: Veraltete Abfrage der Konfiguration, sollte mit <code>CG</code> gemacht werden.
 
Als erstes sollte man mit dem Terminalprogramm ein großes "P" gefolgt von den Eingabetaste eingeben.
Bei korrekter Verbindung sollte der SIGNALDuino mit "OK" antworten.


== Foren Links ==
== Foren Links ==

Aktuelle Version vom 9. November 2023, 11:51 Uhr

SIGNALduino in die Arduino Entwicklungsumgebung einbinden

Zur Inbetriebnahme von SIGNALduino auf der Arduino IDE (getestet mit auf Arduino V1.6.7) müssen die Quelltexte von GitHub (Stand Feb. 2017) geladen werden.

Dort Clone or download und danach Download ZIP klicken und das ZIP-Archiv auspacken oder auf der Kommandozeile git clone https://github.com/RFD-FHEM/SIGNALDuino.git ausführen.

Es werden folgende Dateien benötigt:

  • Die Datei RF_Receiver.ino in einen Ordner RF_Receiver, am besten direkt ins Arduino Verzeichnis der IDE kopieren.
  • Im libraries Ordner der Arduino IDE am besten einen Ordner mit Namen SIGNALduino anlegen, dort müssen dann die Dateien bitstore, output, signalDecoder, SimpleFIFO und TimerOne (jeweils .cpp und .h Datei) abgelegt werden.
  • In diesem SIGNALduino Verzeichnis ist dann noch ein Unterverzeichnis config anzulegen, dort muss die Datei known_16bit_timers.h abgelegt werden.

Struktur der SIGNALduino libraries:SIGNALduino-ViaArduinoEnvironment.jpg


In der Arduino Entwicklungsumgebung unter WerkzeugeBoard "Arduino Nano" und unter WerkzeugeProzessor "ATmega328" angeben. Nach Einstecken des SIGNALduinos in die USB Buchse noch den entsprechenden COM-Port unter WerkzeugePort angeben, danach sollte sich der Scetch RF_Receiver.ino übersetzen und auf den SIGNALduino laden lassen.

SIGNALduino mit Makefile unter Linux

Wer lieber auf der Kommandozeile arbeitet kann SIGNALduino auch mit einem Makefile übersetzen und laden. Benötigt werden dazu:

  • Der Cross-Compiler und alle Werkzeuge für Arduino bzw. AVR. Bei Ubuntu und Debian Systemen:
# Arduino Pakete installieren:
sudo apt-get install arduino arduino-core arduino-mighty-1284p arduino-mk
# AVR
sudo apt-get install flashrom gcc-avr avrdude avr-libc binutils-avr
# Die Unterstützung der Braillezeile kann zu Konflikten um den seriellen Port führen
sudo apt-get remove brltty brltty-x11
# Arduino-Makefile verwendet YAML und serialport in Perl
sudo apt-get libdevice-serialport-perl libyaml-perl

In den Paketen sind die Arduino Quellen und Arduino-Makefile enthalten. Bei wem das aber nicht klappt, der sollte wie hier beschrieben die neuesten Versionen verwenden.

# Hier kann man natürlich jedes beliebige Verzeichnis nehmen.
mkdir -p ~/src/arduino; cd ~/src/arduino
# SIGNALDuino von github clonen
git clone https://github.com/RFD-FHEM/SIGNALDuino.git
# siehe https://www.arduino.cc/en/Main/Software für neueste Version
wget https://downloads.arduino.cc/arduino-1.8.5-linux64.tar.xz
tar xvJf arduino-1.8.5-linux64.tar.xz
  • Die neueste Version Arduino-Makefile (optional)
# Neueste Version von github clonen
git clone https://github.com/sudar/Arduino-Makefile.git

Jetzt muss in SIGNALDuino/RF_Receiver noch ein Makefile erstellt werden:

# Verzeichnis in dem die Arduino-Quellen liegen
ARDUINO_DIR=$(HOME)/src/arduino/arduino-1.8.5
# Verzeichnis mit dem Arduino-Makefile
ARDMK_DIR=$(HOME)/src/arduino/Arduino-Makefile
# Basisverzeichnis unter dem die AVR-Werkzeuge liegen
AVR_TOOLS_DIR=/usr
AVRDUDE_OPTS = -v
# Ab Arduino 1.5 sollte man die Architektur angeben.
ARCHITECTURE  = avr
BOARD_TAG = nano
BOARD_SUB = atmega328
USER_LIB_PATH += $(realpath ../src/_micro-api/libraries)
ARDUINO_LIBS += bitstore output signalDecoder SimpleFIFO TimerOne EEPROM
# Device des Arduino nano
MONITOR_PORT  = /dev/ttyUSB0
# AVRDUDE      = /usr/bin/avrdude
AVRDUDE_CONF = /etc/avrdude.conf
include $(ARDMK_DIR)/Arduino.mk

Wer die Arduino Quellen und Arduino-Makefile aus der Paketverwaltung verwenden möchte, kann folgendes ändern:

ARDUINO_DIR=/usr/share/arduino
ARDMK_DIR=$(ARDUINO_DIR)

Mit Stand vom 17.02.2018 müssen jetzt noch ein paar kleine Fehler beseitigt werden: Präprozessor-Direktiven werden nicht mit Semikolon abgeschlossen

  • in RF_Receiver/RF_Receiver.ino
  • #define CMP_NEWSD statt #define CMP_NEWSD;

Linux unterscheidet Groß- und Kleinschreibung bei Dateien:

  • in src/_micro-api/libraries/output/src/output.h
  • und in src/_micro-api/libraries/signalDecoder/src/signalDecoder.h
  • #include "Arduino.h" statt #include "arduino.h"

Das Makefile ignoriert Bibliotheken ohne library.properties

  • in src/_micro-api/libraries/signalDecoder fehlt library.properties.
cd src/_micro-api/libraries/signalDecoder
cp ../bitstore/library.properties .
sed -i 's/bitstore/signalDecoder/g' library.properties

Danach kann SIGNALDuino für den Arduino Nano übersetzt werden:

cd RF_Receiver
make
# Auf den Arduino laden (flashen)
make upload
# Aufräumen mit
make clean

SIGNALDuino konfigurieren und testen

FHEMduino bzw. SIGNALDuino Schaltplan

In der Datei RF_Receiver.ino sind u.a. folgende Einstellungen:

  • BAUDRATE Die Datenrate mit der SIGNALDuino mit dem PC kommuniziert (Voreinstellung 57600). Man kann also z.B. mit minicom -D /dev/ttyUSB0 -8 -b 57600 die Kommunikation testen.
  • PIN_LED Der Pin an dem die LED zur Signalisierung von Nachrichten angeschlossen ist (Voreinstellung D13 = LED L auf dem Nano).
  • PIN_RECEIVE Der Pin zum Empfang von Daten (Voreinstellung D2).
  • PIN_SEND Der Pin zum Senden von Daten (Voreinstellung D11).

Öffnet man ein Terminal (z.B. minicom siehe oben) so kann man die Kommandoschnittstelle des SIGNALDuino probieren:

  • Eingabe "? Enter" listet die verfügbaren Kommandos: Use one of V i R t X F S P C G
  • V: Zeigt die Version der Software
  • i: Präfix für ein Intertechno-Kommando.
  • R: Zeigt den freien Arbeitsspeicher (RAM) in Bytes
  • t: Zeigt die Dauer des Betriebs seit dem letzten Start in Sekunden (uptime).
  • XQ: Empfänger abschalten (RX Quit)
  • XE: Empfänger einschalten (RX Enable)
  • F: Filter wechseln (derzeit ohne Funktion)
  • S: Präfix für das Aussenden von Nachrichten.
  • P: Prüft die Kommunikation (Ping). Antwortet mit "OK".
  • CG: Abfrage der Konfiguration (Config Get) aus dem EEPROM.
  • CES: Aktiviere Nachrichten mit Sync Puls (Config Enable Sync).
  • CEC: Aktiviere Nachrichten mit Manchester Code (Config Enable Manchester Code).
  • CEU: Aktiviere nicht synchronisierte Nachrichten (Config Enable Unsync).
  • CD[SCU]: Deaktivieren den entsprechenden Nachrichtentyp (z.B. CDU deaktiviert asynchron).
  • G: Veraltete Abfrage der Konfiguration, sollte mit CG gemacht werden.

Als erstes sollte man mit dem Terminalprogramm ein großes "P" gefolgt von den Eingabetaste eingeben. Bei korrekter Verbindung sollte der SIGNALDuino mit "OK" antworten.

Foren Links