Raspberry Pi: Wie kann ein Hardware-Reset-Taster eingebaut werden?
Der Lötkolben war gerade noch heiß, deshalb noch mal eben zwei Kontakte an dem Raspberry Pi (Model B Revision 2.0, ältere Rev. haben diese Reset Logik nicht, meiner hat Rev. 7, siehe cat /proc/cpuinfo) angelötet. In der 2 Rev. des rPi kann an P6 eine Steckerleiste angelötet werden. Wenn diese beiden Kontakte über einen Taster geschlossen werden, wird ein Hardware-Reset ausgelöst. Ist evl. mal ganz hilfreich.
Hier findet Ihr die zwei P6 Lötpunkte, an denen ich die Steckerleiste angelötet haben:
„Raspberry Pi: Wie kann ein Hardware-Reset-Taster eingebaut werden?“ weiterlesen
Raspberry Pi: Wardriving (Warwalking) Ausrüstung (Hardware)
Raspberry Pi Sicherheitsupdate: Für das Package sudo Debian (Kali) gibt es ein Sicherheitsupdate
Für den Raspberry Pi gibt es für das Package sudo (CVE-2014-9680, Debian Bug 772707) ein Sicherheitsupdate.
Für wheezy ist das Problem in Version 1.8.5p2-1+nmu2 gefixt.
Also für den Raspberry Pi ein
1 2 |
sudo apt-get update sudo apt-get upgrade |
durchführen. Eine Mindmap zu den sudo Abhängigkeiten findet ihr hier.
Eclipse PlugIn: Wie kann Text im Konsolen Fenster ausgegeben werden?
Manchmal möchte man einfach nur Text in der Konsole ausgeben. Früher, d.h. vor Eclipse 3.0 musste man dazu eine eigene View erzeugen. Das braucht man nun nicht mehr, man kann die vorhandenen generic Log Konsole verwenden.
Aufrufen geht dann einfach so:
1 2 3 4 5 6 |
MessageConsole konsole = getKonsole("Konsole"); MessageConsoleStream out = konsole.newMessageStream(); out.println("Hallo sagt Thomas von der Konsole."); out.println("Wir schreiben einfach in die Konsole oder?"); out.println(); out.println("Ist das Cool?"); |
Hier die Methode, die die Konsole liefert bzw. erzeugt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/** * Liefert die Log Konsole. Wenn keine Konsole vorhanden ist, wird eine neu erzeugt. * * @param konsolenName * der Name der Konsole * @return MessageConsole */ private MessageConsole getKonsole(String konsolenName) { ConsolePlugin plugin = ConsolePlugin.getDefault(); IConsoleManager konsolenManager = plugin.getConsoleManager(); IConsole[] konsolen = konsolenManager.getConsoles(); for (int i = 0; i < konsolen.length; i++) { if (konsolenName.equals(konsolen[i].getName())) { return (MessageConsole) konsolen[i]; } } // keine Konsole gefunden, dann erzeugen wir eine MessageConsole konsole = new MessageConsole(konsolenName, null); konsolenManager.addConsoles(new IConsole[] { konsole }); return konsole; } |
Wir erhalten dann folgenden Ausgabe:
Um das zu erreichen, muss noch eine neue Abhängigkeit ( org.eclipse.ui.console) (Dependencies) ergänzt werden:
Eclipse PlugIn: Wie kann ein Logeintrag in der Error Log View erstellt werden?
Bei der PlugIn Programmierung unter Eclipse Luna kann leicht auf die Log-View zugegriffen werden. Hier mal ein kleines Beispiel mit den verschiedenen Loglevel:
1 2 3 4 5 6 7 8 9 10 11 |
IStatus status = new Status(IStatus.INFO, "TWPlugin", "Testeintrag im Log im Status Info"); StatusManager.getManager().handle(status, StatusManager.LOG); status = new Status(IStatus.ERROR, "TWPlugin", "Testeintrag im Log im Status Error"); StatusManager.getManager().handle(status, StatusManager.LOG); status = new Status(IStatus.WARNING, "TWPlugin", "Testeintrag im Log im Status Warning"); StatusManager.getManager().handle(status, StatusManager.LOG); status = new Status(IStatus.OK, "TWPlugin", "Testeintrag im Log im Status OK"); StatusManager.getManager().handle(status, StatusManager.LOG); |
So sieht es dann aus:
Eclipse Plugin: Wie kann der absolute Dateipfad einer selektierten Datei aus der View des Package oder Project Explorer ermittelt werden?
Wie kann in Eclipse Luna 4.4.1 aus einem Plugin der absolute Dateipfad einer selektierten Datei aus dem Package oder Project Exporer ermittelt werden?
Das Selection Service wird ja schön hier beschrieben.
Befindet man sich nicht in einer View, sondern in einer Action, kann folgende Methode verwendet werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/** * Liefert den selektierten absoluten Dateipfad aus der Package oder Project * Explorer View. * * @param explorer * Klassennamen des Package oder Projekt Exporers * @return der absolute Dateipfad oder null wenn nichts gewählt oder wenn * ein Projekt gewählt wird. */ private String getAbsolutenDateiPfad(final String explorer) { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); IStructuredSelection structured = (IStructuredSelection) window.getSelectionService().getSelection(explorer); if (structured == null) { return null; } Object erstesElement = structured.getFirstElement(); if (erstesElement instanceof IFile) { IFile file = (IFile) structured.getFirstElement(); IPath path = file.getLocation(); return path.toPortableString(); } else { // Keine Projekte: org.eclipse.core.internal.resources.Project return null; } } |
Der Test liefert jeweils den Pfad inkl. Dateiname:
1 2 3 |
System.out.println("Im Package Explorer selektierte Datei: " + getAbsolutenDateiPfad("org.eclipse.jdt.ui.PackageExplorer")); System.out.println("Im Project Explorer selektierte Datei: " + getAbsolutenDateiPfad("org.eclipse.ui.navigator.ProjectExplorer")); |
Braucht man das Plattform Arbeisverzeichnis kann man dies über die folgende static Methode erhalten:
1 |
System.out.println("Plattform Arbeitsverzeichnis: " + Platform.getLocation()); |
Wie kann auf einem Raspberry Pi unter Kali Linux Ethersex für den AVR-NET-IO compiliert werden?
Wie kann auf einem Raspberry Pi unter Kali Linux (Debian müsste genauso laufen) Ethersex compiliert werden? Das geht so wie sehr ausführlich hier beschrieben. Folgende Anpassungen sind aber noch mit dem root User oder sudo nötig:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apt-get update apt-get upgrade # die nötigen Libs installieren apt-get install gcc-avr avr-libc avrdude dialog gawk m4 libncurses5-dev # ein Verzeichnis erstellen mkdir avr-net-io # in das Verzeichnis gehen cd avr-net-io # das Projekt holen wget http://github.com/ethersex/ethersex/tarball/master/ethersex-ethersex-snapshot_compile_ok-927-g3f59c22.tar.gz # das Archive auspacken tar xfz ethersex-ethersex-snapshot_compile_ok-927-g3f59c22.tar.gz # in das Verzeichnis gehen cd ethersex-ethersex-3f59c22/ # Konfigurieren in der GUI |
# Load a Default Configuration Avr-Net-Io, Hostname vergeben, Mac anpassen, Ip und Netmask auswählen …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# Konfiguration anschauen ob alle Module wie gewünsch vorhanden sind mit make show-config # Ausgabe: MCU: atmega32 Hardware: netio These modules are currently enabled: ====================================== * ADC * ADC_INLINE * ECMD_PARSER * ECMD_TCP * ENC28J60 * ETHERNET * HTTPD * ICMP * IPV4 * NET * ONEWIRE * ONEWIRE_DETECT * ONEWIRE_DETECT_ECMD * ONEWIRE_INLINE * PORTIO_SIMPLE * TCP * UIP * VFS * VFS_INLINE * VFS_INLINE_INLINESVG * VFS_IO_INLINE # compilieren mit make # nach ein paar Minuten ist das ethersex.hex File zum flashen bereit: Final size of ethersex.bin is 28018. avr-objcopy -O ihex -I binary ethersex.bin ethersex.hex =======The ethersex project======== Compiled for: atmega32 at 16000000Hz Imagesize: 28018/32768 bytes (85.50%) [=========================-----] Program (.text + .data) : 20548 bytes Data (.data + .bss) : 1131 bytes |
So oder so läuft dann das flashen. Oder auch so, mal sehen was am Besten läuft. Aber nicht mehr heute Nacht …
Streik EDDV: Raspberry Pi mit TWFlug und Dump1090 Flugauswertung (Planspotter) mit Fhem
Der Streik am 30.1.2015 am Flughafen in Hannover hat keine relevanten Auswirkungen auf den Flugverkehr, der von mir mit einem Raspberry Pi und DUMP1090 via Fhem erfasst wird. Das zeigen diese Grafiken:
Sehr gut kann man auch sehen, das für ca. 6 Stunden nachts nicht viel los ist in EDDV, obwohl Hannover der einzige Flughafen in Norddeutschland ohne Nachtflugverbot ist (zwischen 23 und 6 Uhr sind nur „leise“ Flüge erlaub). Aber in Bremen, Berlin-Tegel, Dortmund, Düsseldorf, Frankfurt und Hamburg hat man ja nachts seine Ruhe.
Raspberry Pi: Wie kann eine automatische Scriptausführung nach einem reboot eingerichtet werden?
Wie kann ein Script automatisch nach dem reboot starten? Da gibt es mehrere Möglichkeiten. Hier die via crontab und @reboot.
Cron ist in den meisten Installationen schon enthalten. In Kali und Debian Linux mit diesen Abhängigkeiten, wie meine Mindmap zeigt: „Raspberry Pi: Wie kann eine automatische Scriptausführung nach einem reboot eingerichtet werden?“ weiterlesen
Raspberry Pi: Wie kann die Bandbreite pro Prozess mit NetHogs angezeigt werden?
Mit dem Kommandozeilenwerkzeug nethogs, das die Bandbreitennutzung nach Prozessen und Sub-Netzen gruppieren kann, bekommt man schnell einen Überblick.
Es listet die PID, den Prozessnamen, Send Bytes, Received Bytes und den ausführenden Benutzer auf.
Die Installation ist auf dem Raspberry Pi mit:
1 |
apt-get nethogs |
schnell erledigt. Das Programm hat nur die folgenden Abhängigkeiten:
„Raspberry Pi: Wie kann die Bandbreite pro Prozess mit NetHogs angezeigt werden?“ weiterlesen
Raspberry Pi: Was ist bei Kali Linux anders als im Debian?
Wer den Raspberry Pi bisher unter Debian laufen hat, wundert sich evl. über einige Unterschiede zu Kali Linux. Welche fallen zuerst auf?
Es gibt default kein raspi-config. Der Speicher der SD-Karte kann aber mit raspi-config sehr einfach expandiert werden. Deshalb ausnahmsweise ein paar Packages, die nicht von Kali stammen, wie folgt installieren mit dem root User:
1 2 3 4 5 6 7 8 9 |
apt-get update apt-get upgrade wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20150706_all.deb # lua5.1 da lua5.2 nicht läuft wget http://http.us.debian.org/debian/pool/main/l/lua5.1/lua5.1_5.1.5-7.1_armel.deb wget http://http.us.debian.org/debian/pool/main/t/triggerhappy/triggerhappy_0.3.4-2_armel.deb dpkg -i triggerhappy_0.3.4-2_armel.deb dpkg -i lua5.1_5.1.5-7.1_armel.deb dpkg -i raspi-config_20150706_all.deb |
Dann gibt es unter Kali kein /boot
Verzeichnis mit den Boot Dateien. Das /boot
Verzeichnis ist dort leer. Das /boot
Verzeichnis liegt auf einer anderen Partition und zwar auf mmcblk0p1
. Deshalb ein Verzeichnis z.B. /boot-bereich anlegen und mounten. Dann können diese Dateien bearbeitet werden.
Wenn die Dateien bearbeitet wurden, einfach das Verzeichnis wieder umounten.
1 2 3 4 |
mkdir /boot-bereich mount /dev/mmcblk0p1 /boot-bereich/ nano /boot-bereich/config.txt umount /boot-bereich |
Welche Unterschiede fallen Euch auf? Gern als Kommentar.
Raspberry Pi: Wie können OpenHab Addons installiert werden?
Wie können Addons für OpenHab installiert werden?
Dazu erweitern wir erst einmal die Addons mit den Bindings. Die werden später benötigt.
1 2 3 4 5 |
cd OpenHab/addons wget https://openhab.ci.cloudbees.com/job/openHAB/lastSuccessfulBuild/artifact/distribution/target/distribution-1.6.0-SNAPSHOT-addons.zip unzip distribution-1.6.0-SNAPSHOT-addons.zip # Optional: Löschen des zip rm distribution-1.6.0-SNAPSHOT-addons.zip |
Jessie: RPI-Monitor für den Raspberry Pi installieren
Dieser Entwurf aus dem letzten Jahr, wollte ich nun auch noch veröffentlichen. Wer einen RPI-Monitor braucht:
Wie hier gut beschrieben die Version 2.6.1 installieren, da die aktuelle Version 2.9.1 unter jessie nicht läuft.
Aber auch auf der RPI-Monitor Seite wird die Installation ausführlich beschrieben.
1 2 3 4 5 |
sudo apt-get update && sudo apt-get upgrade sudo apt-get install dpkg-dev librrds-perl libhttp-daemon-perl libjson-perl libipc-sharelite-perl libfile-which-perl wget --no-check-certificate https://github.com/XavierBerger/RPi-Monitor-deb/raw/master/packages/rpimonitor_2.6-1_all.deb sudo dpkg -i rpimonitor_2.6-1_all.deb rm rpimonitor_2.6-1_all.deb |
Nun im Browser http://IP:8888/ aufrufen.
„Jessie: RPI-Monitor für den Raspberry Pi installieren“ weiterlesen
Raspberry Pi Wardrive: Kismet compilieren und WLANs auf Google anzeigen
Da es auf Debian wheezy noch nicht das aktuelle Kismet Package gibt, hier die Anleitung wie es compiliert und installiert werden kann.
1 2 3 4 5 6 7 8 9 10 |
# System aktualisieren sudo apt-get update sudo apt-get upgrade # nötige Programme laden sudo apt-get install screen gpsd libncurses5-dev libpcap-dev tcpdump libnl-dev wget http://www.kismetwireless.net/code/kismet-2013-03-R1b.tar.gz tar xfvz kismet-2013-03-R1b.tar.gz cd kismet-2013-03-R1b/ ./configure sudo make install |
Wenn der GPS Empfänger über gpsd läuft und wie bei mir nicht an dem USB Port hängt, müssen in /usr/local/etc/kismet.conf
noch folgende Einstellungen gemacht werden.
1 2 3 4 5 6 7 |
# (Optional) Verzeichnis wo die Logeinträge hingeschrieben werden, sonst start Verzeichnis logprefix=/home/pi/kismet # das WLAN Interface und den WLAN-Stick Type ncsource=wlan0:type=rt2800usb gps=true gpstype=gpsd gpshost=localhost:2947 |
Gestartet wird Kismet bei mir über ein kleines bash Script start-wardrive.sh
:
1 2 3 4 5 6 |
#!/bin/bash cd kismet-2013-03-R1b sudo pkill wpa_cli sudo pkill ifplugd sudo pkill wpa_supplicant sudo kismet |
Für die Auswertung kann man das Python Script zum umwandeln einer NETXML Datei in das KML Format verwenden, es geht wie folgt
„Raspberry Pi Wardrive: Kismet compilieren und WLANs auf Google anzeigen“ weiterlesen
Raspberry Pi: Wardriving (Warwalking) Kismet netxml Dateien visualisieren mit Google Earth
Auswertung der netxml
Daten geht auch sehr gut mit giskismet, das die netxml
Dateien in eine SQLite Datenbank (default: wireless.dbl ) kopiert und auch GoogleEarth / KML Dateien für die Visualisierung via SQL erzeugen kann.
Installiert wird es auf dem Raspberry Pi mit: „Raspberry Pi: Wardriving (Warwalking) Kismet netxml Dateien visualisieren mit Google Earth“ weiterlesen
Raspberry Pi: GPS-Module GY-GPS6MV2 einrichten
Haben nun auch einen GPS-Empfänger (Datenblatt (pdf)) bekommen. Hier ein paar Highlights:
- Model: GY-GPS6MV2
- Power Supply Range: 3 V to 5 V
- Ceramic antenna
- EEPROM for saving the configuration data when powered off
- Backup battery
- LED signal indicator
- Antenna Size: 25 x 25 mm
- Module Size: 25 x 35 mm
- Default Baud Rate: 9600 bps
Klein und billig: „Raspberry Pi: GPS-Module GY-GPS6MV2 einrichten“ weiterlesen
OpenWrt Barrier Breaker 14.07: Wie kann Dump1090 auf einem TP-WR703N Router unter OpenWrt zum Airplanespotting installiert werden?
Hatte noch einen TP-WR703N rumliegen. Wenn dort die aktuelle Version von OpenWrt (14.07) installiert ist, geht es mit LuCI sehr schnell.
Auf die Seite System – Software gehen. Im Filter dump1090 eingeben und auf Find package
klicken. Dann unten mit klick auf Install
das fertige Package installieren.
„OpenWrt Barrier Breaker 14.07: Wie kann Dump1090 auf einem TP-WR703N Router unter OpenWrt zum Airplanespotting installiert werden?“ weiterlesen
Arduino: Wie können RFID Tags eingelesen und drahtlos empfangen werden?
Wie hier schon beschrieben, können mit einem Arduino und eine RFID-Reader leicht RFID-Tags eingelesen werden.
In dieser Anleitung, werden nun die eingelesenen RFID Daten drahtlos versendet und empfangen. Dazu wird ein zweiter Arduino und ein Sender und Empfänger ( < 2 Euro) verwendet. Hier der schematische Aufbau: „Arduino: Wie können RFID Tags eingelesen und drahtlos empfangen werden?“ weiterlesen
Arduino: Wie können RFID Tags eingelesen werden?
Wie können RFID-Tags eingelesen werden?
Das geht ganz einfach mit einem Arduino Nano und ein 125 kHz EM4100 RFID card reader module (RDM630 UART) das keine 5 Euro inkl. Versand kostet.
Die Belegung des RFID-Readers:
Die PINs:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
1.Pin Definition (WEIGAND26): 2. Pin definition (TTL interface RS232 data format): P1: P1: PIN1 DATA0 PIN1 TX PIN2 DATA1 PIN2 RX PIN3 PIN3 PIN4 GND PIN4 GND PIN5 +5V(DC) PIN5 +5V(DC) P2: P2: PIN1 ANT1 PIN1 ANT1 PIN2 ANT2 PIN2 ANT2 P3: P3: PIN1 LED PIN1 LED PIN2 +5V(DC) PIN2 +5V(DC) PIN3 GND PIN3 GND |
Spec RDM630: Baud Rate: 9600bps,N,8,1, Frequenze: 125 kHz, DC 5V (+-5%), <50 mA, Empfangsbereich: 2 bis 5 cm, Checksum card 10byte Data mit XOR So sieht der Aufbau aus:
Es sind nur 3 Verbindungen zwischen dem Arduino und dem RDM630 nötig und zwar:
1 2 3 4 5 |
Arduino Nano: D6 auf PIN 1 des RDM630 (TX) +5v auf PIN 5 des RDM630 (+5 Volt) GND auf PIN 4 des RDM630 (GND) Antenne auf P2 PIN 1 und 2 des RDM630 |
Dann folgende Software RFIDReader.ino auf den Arduino laden, die den Vorteil hat, das die serielle Konsole frei bleibt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
/* RFIDReader Beschreibung: Dieses Programm liesst RFID-Tags von Transponer ein und ueberprueft die Checksumme (XOR) und gibt die Nummer auf der Seriellen-Konsole aus wenn die Nummer erkannt wurde gefolgt von einem OK. Folgende Verbindungen sind noetig: Arduino Nano: D6 auf PIN 1 des RDM630 +5v auf PIN 5 des RDM630 (+5 Volt) GND auf PIN 4 des RDM630 (GND) Antenne auf P2 PIN 1 und 2 des RDM630 Serielle Konsole auf 57000 Baud stellen. Compile mit Arduino 1.5.8 IDE. Einstellung: Board Arduino Nano, Prozessor Arduino ATMega328, Programmer USBtinyISP Der Sketch verwendet 8.216 Bytes (26%) des Programmspeicherplatzes. Das Maximum sind 30.720 Bytes. Globale Variablen verwenden 378 Bytes (18%) des dynamischen Speichers, 1.670 Bytes für lokale Variablen verbleiben. Das Maximum sind 2.048 Bytes. Dieses Programm basiert auf dem Beispielprogramm von maniacbug https://maniacbug.wordpress.com/2011/10/09/125khz-rfid-module-rdm630/ Copyright (C) 2015 Thomas Wenzlaff http://www.wenzlaff.de This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see {http://www.gnu.org/licenses/}. */ #include <SoftwareSerial.h> // Pin definitions // Specifies a function to call when an external interrupt occurs. Replaces any previous function that was attached to the interrupt. // Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3). // The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18). const int rfid_irq = 0; // PIN 6 ist auf dem Nano der D6 oder der Pin 9 von rechts, wenn die Stecker rechts liegen const int rfid_tx_pin = 6; // RX wird nicht benoetigt const int rfid_rx_pin = 7; // Untertrueckung von Rauschen bzw. leer Ausgaben, evl. aendern const long LEER = 16843009L; // Baud Rate zum Host PC, evl. aendern const long baudRate = 57600L; // For communication with RFID module SoftwareSerial rfid(rfid_tx_pin, rfid_rx_pin); // Indicates that a reading is now ready for processing volatile bool ready = false; // Buffer to contain the reading from the module uint8_t buffer[14]; uint8_t* buffer_at; uint8_t* buffer_end = buffer + sizeof(buffer); void rfid_read(void); void setup(void) { // Oeffnet die Serielle Verbindung zum Host PC um die Ausgabe der RFID-Tags zu sehen // Geschwindigkeit kann angepasst werden Serial.begin(baudRate); Serial.println("Starte RFID-Reader V. 1.0 von wenzlaff.info"); // Open software serial connection to RFID module pinMode(rfid_tx_pin,INPUT); // muss fest fuer das Modul auf 9600 stehen rfid.begin(9600); Serial.println("OK"); // Listen for interrupt from RFID module. Fallingfor when the pin goes from high to low. attachInterrupt(rfid_irq,rfid_read,FALLING); } void loop(void) { if ( ready ) { // Convert the buffer into a 32-bit value uint32_t result = 0; // Skip the preamble ++buffer_at; // Accumulate the checksum, starting with the first value uint8_t checksum = rfid_get_next(); // We are looking for 4 more values int i = 4; while(i--) { // Grab the next value uint8_t value = rfid_get_next(); // Add it into the result result <<= 8; result |= value; // Xor it into the checksum checksum ^= value; } // Pull out the checksum from the data uint8_t data_checksum = rfid_get_next(); // evl. die Nummer anpassen, oder die if abfrage loeschen if (result != LEER){ if ( checksum == data_checksum ){ Serial.print(result); Serial.println(" OK"); } } // We're done processing, so there is no current value ready = false; } } // Convert the next two chars in the stream into a byte and // return that uint8_t rfid_get_next(void) { // sscanf needs a 2-byte space to put the result but we // only need one byte. uint16_t result; // Working space to assemble each byte static char byte_chars[3]; // Pull out one byte from this position in the stream snprintf(byte_chars,3,"%c%c",buffer_at[0],buffer_at[1]); sscanf(byte_chars,"%x",&result); buffer_at += 2; return static_cast<uint8_t>(result); } void rfid_read(void) { // Only read in values if there is not already a value waiting to be // processed if ( ! ready ) { // Read characters into the buffer until it is full buffer_at = buffer; while ( buffer_at < buffer_end ) *buffer_at++ = rfid.read(); // Reset buffer pointer so it's easy to read out buffer_at = buffer; // Signal that the buffer has data ready ready = true; } } |
Compile mit der Arduino 1.5.8 IDE.
Einstellung in der IDE:
Board Arduino Nano, Prozessor Arduino ATMega328, Programmer USBtinyISP
Serielle Konsole auf 57000 Baud stellen
und einen RFID-Tag an die Antenne halten:
Es wird eine Reichweite von ca. 4 cm erreicht. Wenn die Antenne unter der Schreibtischplatte montiert wird, kann der RFID-Tag sicher gelesen werden, wenn der Tag oben drauf liegt (Anwesendheitskennung).
Habt ihr eine Idee, wie die Reichweite vergrößert werden kann?
Oder einen guten Anwendungsfall?