Hallo,
super Sache. Hast du schon Erfahrungswerte, wie lange die Batterien ca. halten, bei Verwendung dieser Sketches?
Lg User
Hallo,
super Sache. Hast du schon Erfahrungswerte, wie lange die Batterien ca. halten, bei Verwendung dieser Sketches?
Lg User
Ja in etwa so, glaub fallen 4€+portoanteil raus dann von den Modulen wenn du sie schon hast.Gruß
Himbeerfreund
Okay, danke für die Info...
---
Habe hier noch jeweils ein Sende und Emfangsmodul dieser Billigdinger aus China liegen. Ist es mit diesen auch möglich an den Empfänger mit dem RFM12B zu kommunizieren? Hat dies eventuell schon jemand versucht?
Danke und Lg
User
@user92 Wenn die RFM12b schon da sind ist das kein Problem einfach sagen dann würde das entsprechende weniger bestellt.
Hallo,
danke für diene Antwort. Habe ich das richtig verstanden, so wäre ohne RFM12B der angegebene Preis -5€ zu rechnen?
Lg User
Hallo,
das mit der Massenbestellung klingt interessant, zumindest ab einer gewissen Stückzahl würde der Preis ja wirklich sehr heiß werden
Vielleicht ist es ja garnicht so schlecht, dass ich mit der Bestellung der PCBs so gezögert habe. Problem ist nur, dass ich die RFM12B bereits bestellt habe...
Gibt es eventuell auch die Möglichkeit diese Sets ohne RFM12B zu bestellen ohne das dies viel Mehraufwand eurerseits verlangt?
Handelt es sich bei "Sender+Booster" um eine Platine auf der gleich alles drauf ist oder sind das zwei getrennte Teile?
Der Boosteranteil stammt von meigrafd, die anderen Sender und Empfänger bauen auf das tinytx3 und RFM2Pi_rev3 auf und wurden nach SMD verändert sind aber auch noch in Verarbeitung.
Wie ist das zu verstehen, was ist nun alles in SMD-Bauteile abgeändert worden?
Danke für eure tolle Arbeit hier in diesem Forum.
Lg
Hallo,
ja das mit dem Boost-Converter habe ich gelesen, allerdings dachte ich ihr habt das nur als getrennte Platine vor sodass man das bei Version 3 zwischen PCB und Batterie schalten kann. Habe mich jedoch noch nicht so wirklich dafür interessiert da ich das ganze aufgrund der Bauteile doch etwas teuer fand. Aber falls ich das jetzt richtig verstehe würde es ab 50 Stück auf 2,5€ für Platine mit Bauteilen kommen? Das wäre doch ein Hit!
Hat sich da ein Fehler eingeschlichen, bei 100 Stück wird es demnach wieder teurer...
Naja das Hauptproblem dabei ist dass die meisten Sketches bereits am Limit sind und so eine Aufforderung zum senden vielleicht zu viel Platz wegnehmen könnte - ausprobiert hab ich das aber noch nicht, ich arbeite mich zZt in Framebuffer ein um son 2,8" Display mit den Wetterinformationen zu füttern
Ja das habe ich leider schon irgendwo im Beitrag gelesen, schade. Das mit dem Display klingt natürlich interessant. Vorallem wäre deshalb das Senden auch interessant, so könnte man doch eventuell auch ein Display herstellen, welches die Infos über Funk bekommt, aber auch hierfür wird der attiny84 vermutlich zu klein sein
Ich glaub Anzahl der Bohrungen sind unbegrenzt, allerdings wären die Kanten dann nicht mehr so schön glatt
Naja das wäre mir eigentlich herzlichst egal, da das ganze im Endeffekt eh in ein Gehäuse sollte. Diesen kleinen Schönheitsfehler würde ich für diese Preisdifferenz in Kauf nehmen! Beziehungsweise sollte das schleifen doch auch kein Problem sein, wenn es denn schon unbedingt ganz ohne Löcher am Rand sein soll?
Aber vielleicht hat ja jemand was vernünftiges zum Schneiden und macht diesbezüglich auch eine Massenbestellung Auf der 10x10cm Platine hätten doch 8Stück Platz. Bei 10 Platinen für 19,90€ wären das 0,25€ pro PCB
Hätte da noch eine Überlegung bezüglich einem Wassersensor. Aus dem Sketch vom Reedkontakt kann man sich doch eigentlich ganz einfach einen Wassersensor basteln, indem man einfach zwei Drähte am Boden platziert(1xGND und 1xPIN13). So sollte, im Fall das es Nass wird, doch GND an PIN13 anliegen, sodass der Sender warnt? Hierzu gehört in der Schleife dann nur der 1er mit dem 0er vertauscht... Könnte das so einfach funktionieren?
Lg
Danke dragoner2k und meigrafd, die beiden Sketches haben bei mir zumindest nicht auf Anhieb funktioniert. Jedoch habe ich es mithilfe dieser hinbekommen. Der Sketch, welcher bei mir funktioniert sieht wie folgt aus:
//--------------------------------------------------------------------------------------
// TempTX-tiny ATtiny84 Based Wireless Temperature Sensor Node
// By Nathan Chantrell http://nathan.chantrell.net
// Updated by Martin Harizanov (harizanov.com) to work with DS18B20
// To use with DS18B20 instead of TMP36, a 4K7 resistor is needed between the Digital 9 and Digital 10 of the ATTiny (Vdd and DQ)
// To get this to compile follow carefully the discussion here: http://arduino.cc/forum/index.php?topic=91491.0
// GNU GPL V3
//--------------------------------------------------------------------------------------
// modified by meigrafd @ 26.12.2013
//------------------------------------------------------------------------------
//#include <JeeLib.h> // https://github.com/jcw/jeelib
#include "pins_arduino.h"
#include <RFM12B.h>
#include <avr/sleep.h>
#include <PinChangeInterrupt.h>
//------------------------------------------------------------------------------
#define NODEID 1 // RF12 node ID in the range 1-30
#define NETWORKID 210 // RF12 Network group
#define FREQ RF12_433MHZ // Frequency of RFM12B module
#define GATEWAYID 22 // the node ID we're sending to
#define ACK_TIME 2000 // Number of milliseconds to wait for an ack
#define SENDDELAY 1000 // wait this many ms between sending packets
#define requestACK true // request ACK? (true/false)
//------------------------------------------------------------------------------
// PIN-Konfiguration
//------------------------------------------------------------------------------
// SENSOR pins
#define SW_PIN 10 // Reed switch connected from ground to this pin (D10/ATtiny pin 13)
// LED pin
#define LEDpin 8 // D8, PA2 (ATtiny pin 11) - set to 0 to disable LED
//------------------------------------------------------------------------------
/*
+-\/-+
VCC 1| |14 GND
(D0) PB0 2| |13 AREF (D10)
(D1) PB1 3| |12 PA1 (D9)
RESET 4| |11 PA2 (D8)
INT0 PWM (D2) PB2 5| |10 PA3 (D7)
PWM (D3) PA7 6| |9 PA4 (D6)
PWM (D4) PA6 7| |8 PA5 (D5) PWM
+----+
*/
//encryption is OPTIONAL
//to enable encryption you will need to:
// - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)
// - to call .Encrypt(KEY) to start encrypting
// - to stop encrypting call .Encrypt(NULL)
//#define KEY "ABCDABCDABCDABCD"
//------------------------------------------------------------------------------
// Need an instance of the Radio Module
RFM12B radio;
// Temperatur-String zum Versand per 433 Mhz
char msg[26];
//################################################################################???########################################
static void activityLed (byte state, byte time = 0) {
if (LEDpin) {
pinMode(LEDpin, OUTPUT);
if (time == 0) {
digitalWrite(LEDpin, state);
} else {
digitalWrite(LEDpin, state);
delay(time);
digitalWrite(LEDpin, !state);
}
}
}
// blink led
static void blink (byte pin, byte n = 3) {
if (LEDpin) {
pinMode(pin, OUTPUT);
for (byte i = 0; i < 2 * n; ++i) {
delay(100);
digitalWrite(pin, !digitalRead(pin));
}
}
}
//--------------------------------------------------------------------------------------------------
// Read current supply voltage
//--------------------------------------------------------------------------------------------------
long readVcc() {
bitClear(PRR, PRADC);
ADCSRA |= bit(ADEN); // Enable the ADC
long result;
// Read 1.1V reference against Vcc
#if defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0); // For ATtiny84
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // For ATmega328
#endif
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate Vcc in mV
ADCSRA &= ~ bit(ADEN);
bitSet(PRR, PRADC); // Disable the ADC to save power
return result;
}
void setup() {
radio.Initialize(NODEID,FREQ,NETWORKID); // Initialize RFM12 with settings defined above
#ifdef KEY
radio.Encrypt((byte*)KEY);
#endif
radio.Control(0xC040); // Adjust low battery voltage to 2.2V
radio.Sleep(); // Put the RFM12 to sleep
pinMode(SW_PIN, INPUT); //set the pin to input
digitalWrite(SW_PIN, HIGH); //use the internal pullup resistor
attachPcInterrupt(SW_PIN,wakeUp,FALLING); // attach a PinChange Interrupt on the falling edge
PRR = bit(PRTIM1); // only keep timer 0 going
ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); // Disable the ADC to save power
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set sleep mode
sleep_mode(); // Sleep now
}
void wakeUp(){}
void loop() {
int rState;
int switchState = digitalRead(SW_PIN); // Read the state of the reed switch
if (switchState == LOW) { // Door/window is open
rState = 1; // 1 indicates open
}
else { // Door/window is closed
rState = 0; // 0 indicates closed
}
int supplyV = readVcc(); // Get supply voltage
if (rState==0){
// msg-Variable mit Daten zum Versand fuellen, die spaeter an das WebScript uebergeben werden
strcpy(msg,"v=");
itoa(supplyV,&msg[strlen(msg)],10);
strcat(msg,"&s=");
itoa(rState,&msg[strlen(msg)],10);
// Send data via RF
radio.Wakeup();
radio.Send(GATEWAYID, (uint8_t *)msg, strlen(msg), requestACK);
//radio.Send(GATEWAYID, &msg, sizeof(msg), requestACK);
radio.SendWait(2); //wait for RF to finish sending (2=standby mode)
radio.Sleep();
if (LEDpin) {
blink(LEDpin, 2); // blink LED
}
delay(SENDDELAY);
}
}
Alles anzeigen
Es wird damit nur gesendet, wenn Pin13 des Attiny nicht auf Masse liegt!
Jedoch weiß ich noch nicht, ob der ganze Sketch auch wirklich "stromsparend" ist. Dies kann ich leider erst wirklich testen, wenn ich PCBs und Batteriehalter habe.
---------------
Hat hier eigentlich schon jemand versucht bei der PCB-Bestellung auf SeeedStudio die 10x5Version zu wählen und darauf vier TinyTX fertigen zu lassen? (Das sollte sich soweit ich gesehen habe ausgehen) Hab mir das wie folgt vorgestellt:
Glaubt ihr, ist es überhaupt möglich so viele Bohrungen zwischen den einzelnen PCBs anzubringen? Ich stelle es mir zumindest sehr einfach vor die Platinen zu trennen, wenn diese so durchlocht werden.
Habe noch eine Frage zur Empfängerschaltung: Ist es mir hier auch irgendwie möglich vom Raspberry aus etwas zu senden um beispielsweise Funksteckdosen zu schalten? Bzw. um in weiterer Folge eventuell einmal auch Sender zum Liefern der Daten auffordern zu können (Natürlich ist mir klar, dass dies wieder andere Sketches, zumindest auf den Sendern, verlangen würde).
Hallo,
habe meinen Fehler nun endlich gefunden. Das Problem lag bei mir am Empfänger.
Ist es möglich das sich in der Empfängerschaltung des ersten Posts ein kleiner Fehler eingeschlichen hat oder habt ihr es wirklich so? Es sieht doch so aus als würde Pin6 des Attinys an RX und 3,3V angeschlossen gehören. Bei mir waren jedoch gerade die 3,3V das Problem. Eventuell wurde hier ein x wegen Durchtrennung vergessen?
Hatte noch ein Problem mit dem Sketch des DS18B20, da hier als Spannung immer -1 übertragen wird, glaube kaum das dies beabsichtigt ist. Um dies zu ändern müssen in der Funktion readVcc, die Kommentare weg, sodass dieser Teil gleich aussieht wie in den anderen Sketches..?
//--------------------------------------------------------------------------------------
// TempTX-tiny ATtiny84 Based Wireless Temperature Sensor Node
// By Nathan Chantrell http://nathan.chantrell.net
// Updated by Martin Harizanov (harizanov.com) to work with DS18B20
// To use with DS18B20 instead of TMP36, a 4K7 resistor is needed between the Digital 9 and Digital 10 of the ATTiny (Vdd and DQ)
// To get this to compile follow carefully the discussion here: http://arduino.cc/forum/index.php?topic=91491.0
// GNU GPL V3
//--------------------------------------------------------------------------------------
// modified by meigrafd @ 26.12.2013
//------------------------------------------------------------------------------
//#include <JeeLib.h> // https://github.com/jcw/jeelib
#include "pins_arduino.h"
#include <RFM12B.h>
#include <avr/sleep.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//------------------------------------------------------------------------------
#define NODEID 1 // RF12 node ID in the range 1-30
#define NETWORKID 210 // RF12 Network group
#define FREQ RF12_433MHZ // Frequency of RFM12B module
#define GATEWAYID 22 // the node ID we're sending to
#define ACK_TIME 2000 // Number of milliseconds to wait for an ack
#define SENDDELAY 300000 // wait this many ms between sending packets
#define requestACK true // request ACK? (true/false)
//------------------------------------------------------------------------------
// PIN-Konfiguration
//------------------------------------------------------------------------------
// SENSOR pins
#define ONE_WIRE_BUS 10 // DS18B20 Temperature sensor is connected on D10/ATtiny pin 13
#define ONE_WIRE_POWER 9 // DS18B20 Power pin is connected on D9/ATtiny pin 12
// LED pin
#define LEDpin 8 // D8, PA2 (ATtiny pin 11) - set to 0 to disable LED
//------------------------------------------------------------------------------
/*
+-\/-+
VCC 1| |14 GND
(D0) PB0 2| |13 AREF (D10)
(D1) PB1 3| |12 PA1 (D9)
RESET 4| |11 PA2 (D8)
INT0 PWM (D2) PB2 5| |10 PA3 (D7)
PWM (D3) PA7 6| |9 PA4 (D6)
PWM (D4) PA6 7| |8 PA5 (D5) PWM
+----+
*/
//encryption is OPTIONAL
//to enable encryption you will need to:
// - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)
// - to call .Encrypt(KEY) to start encrypting
// - to stop encrypting call .Encrypt(NULL)
//#define KEY "ABCDABCDABCDABCD"
//------------------------------------------------------------------------------
// Need an instance of the Radio Module
RFM12B radio;
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Temperatur-String zum Versand per 433 Mhz
char msg[26];
//########################################################################################################################
static void activityLed (byte state, byte time = 0) {
if (LEDpin) {
pinMode(LEDpin, OUTPUT);
if (time == 0) {
digitalWrite(LEDpin, state);
} else {
digitalWrite(LEDpin, state);
delay(time);
digitalWrite(LEDpin, !state);
}
}
}
// blink led
static void blink (byte pin, byte n = 3) {
if (LEDpin) {
pinMode(pin, OUTPUT);
for (byte i = 0; i < 2 * n; ++i) {
delay(100);
digitalWrite(pin, !digitalRead(pin));
}
}
}
//--------------------------------------------------------------------------------------------------
// Read current supply voltage
//--------------------------------------------------------------------------------------------------
long readVcc() {
bitClear(PRR, PRADC);
ADCSRA |= bit(ADEN); // Enable the ADC
long result;
// Read 1.1V reference against Vcc
#if defined(__AVR_ATtiny84__)
ADMUX = _BV(MUX5) | _BV(MUX0); // For ATtiny84
#else
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); // For ATmega328
#endif
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate Vcc in mV
ADCSRA &= ~ bit(ADEN);
bitSet(PRR, PRADC); // Disable the ADC to save power
return result;
}
void setup() {
radio.Initialize(NODEID,FREQ,NETWORKID); // Initialize RFM12 with settings defined above
#ifdef KEY
radio.Encrypt((byte*)KEY);
#endif
radio.Control(0xC040); // Adjust low battery voltage to 2.2V
radio.Sleep(); // Put the RFM12 to sleep
PRR = bit(PRTIM1); // only keep timer 0 going
ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); // Disable the ADC to save power
delay(100);
// Start up the library
sensors.begin();
}
void loop() {
pinMode(ONE_WIRE_POWER, OUTPUT); // set power pin for DS18B20 to output
digitalWrite(ONE_WIRE_POWER, HIGH); // turn DS18B20 sensor on
delay(50); // Allow 50ms for the sensor to be ready
sensors.requestTemperatures(); // Send the command to get temperatures
int temp = sensors.getTempCByIndex(0)*100; // read sensor 1
//String temp2sensors.getTempCByIndex(1)*100); // read second sensor.. you may have multiple and count them upon startup but I only need one
int supplyV = readVcc(); // Get supply voltage
digitalWrite(ONE_WIRE_POWER, LOW); // turn Sensor off to save power
pinMode(ONE_WIRE_POWER, INPUT); // set power pin for Sensor to input before sleeping, saves power
// msg-Variable mit Daten zum Versand fuellen, die spaeter an das WebScript uebergeben werden
strcpy(msg,"v=");
itoa(supplyV,&msg[strlen(msg)],10);
strcat(msg,"&t=");
itoa(temp,&msg[strlen(msg)],10);
// Send data via RF
radio.Wakeup();
radio.Send(GATEWAYID, (uint8_t *)msg, strlen(msg), requestACK);
//radio.Send(GATEWAYID, &msg, sizeof(msg), requestACK);
radio.SendWait(2); //wait for RF to finish sending (2=standby mode)
radio.Sleep();
if (LEDpin) {
blink(LEDpin, 2); // blink LED
}
delay(SENDDELAY);
}
Alles anzeigen
Wahnsinn nun funktioniert es endlich!
//Würde nun auch gerne Reedkontakte verwenden. Hierzu wollte ich den Sketch von ps915 aus diesem Thread nutzen. Jedoch funktioniert hierbei die Kommunikation nicht. Konnte in diesem Sketch auch keine GatewayID definieren. Liegt dies daran, dass dieser Thread auf dem RFM12PI-Modul aufbaut?
user92: Du musst den UART erst für die freie Verwendung aktivieren - wie das geht wird im Ersten Beitrag ab der Zeile UART: erklärt (fast am Ende, über der Sensor.pl)
Habe das ganze am Raspi wie in dem Link konfiguriert. Habe auch schon versucht ein anderes Image zu verwenden...
Das habe ich leider bereits erledigt, jedoch will es nicht.
Kann es denn sonst nichts sein, wenn die Verkabelung sicher in Ordnung ist? Habe nun schon ziemlich viel probiert und komme trotzdem nicht zu den Werten
Danke und Lg
User
Hallo,
habe das ganze nun auch einmal aufgebaut und scheinbar auch eine Kommunikation zwischen Sender und Empfänger zusammengebracht, zumindest blinken die LEDs, wenn etwas gesendet wird am Sender, sowie am Empfänger im selben Moment.
Verwende die Sketches aus dem bereitgestellten Sketchbook. Am Empfänger die Receiver_PI und am Sender die Send_TMP36. Habe am Sender jedoch auch schon andere Sketches versucht, sowie auch andere IDs vergeben. Allerdings kommt am Raspberry leider nichts an beziehungsweise ich schaffe es eben nicht, dass es mir angezeigt wird.
Habe das ganze am Raspi wie in dem Link konfiguriert. Habe auch schon versucht ein anderes Image zu verwenden...
Natürlich habe ich auch das bereitgestellte Perl-Script im Zusammenhang mit den bereitgestellten PHP-Dateien versucht, jedoch kommen auch dort leider keine Daten an.
Alles anzeigen
@steen1: Hast du vielleicht die falsche Baud eingestellt? Ich öffne minicom so:Wenn du die Sender / Empfänger startest kommt zumindest mit dem Sketch den mattes1007 erwähnte (dort ist die Baud auf 9600 eingestellt), eine Ausgabe:
Code Alles anzeigen[RF12demo.Attiny84] Available commands: <nn> i - set node ID (standard node ids are 1..26) (or enter an uppercase 'A'..'Z' to set id) <n> b - set MHz band (4 = 433, 8 = 868, 9 = 915) <nnn> g - set network group (RFM12 only allows 212, 0 = any) <n> c - set collect mode (advanced, normally 0) ...,<nn> a - send data packet to node <nn>, with ack ...,<nn> s - send data packet to node <nn>, no ack <n> l - turn activity LED on DIG8 on or off <n> q - set quiet mode (1 = don't report bad packets) Current configuration: 66 i2 g210 @ 433 MHz
Und dann kann man über die TX Leitung Befehle absetzen wie zB 4b um auf 433MHz umzustellen
/EDIT: Die RFM12BSP REV:1.0 Module sind anscheint träger - wenn ich die verwendete dauert es ca. 5 Sekunden bis ein Befehl umgesetzt wird... Nutze ich aber die neuen RFM12BS REV:3.0 dann wird der Befehl sofort abgesetzt (aber trotzdem kommt weiterhin "-> 0 b")
/EDIT2: Wenn ich die RFM12BS nutze aber als Befehl 1s dann blinken beide Module also auch der Empfänger Aber trotzdem kommt "-> 0 b"
Wenn ich minicom mit folgendem Befehl starte:
[font="Monaco, Consolas, Courier, monospace"]minicom -b 9600 -o -D /dev/ttyAMA0[/font]
kommt bei mir leider auch keine Auswahl, muss man im minicom noch irgendetwas konfigurieren, sodass man die ankommenden Daten sehen kann.
Meine Verkabelung sieht exakt so aus: Empfänger Sender
In Verwendung habe ich derzeit die RFM12B-Module von eBay.
Jedoch scheint es mir nicht an der Verkabelung beziehungsweise irgendwelche Komponenten zu liegen, welche dort verwendet wurden, da die Kommunikation ja scheinbar klappt, wenn auf beiden Seiten die LED zum blinken kommt. Der Fehler scheint irgendwo am Raspberry zu liegen, jedoch suche ich nun schon intensiv zwei Tage nach dem Problem und habe das ganze Strickt nach Anleitung gemacht -> Komme jedoch nicht an die Daten
Hat hier jemand eventuell noch eine Idee, wo die Ursache meines Problems liegen könnte? Wäre über jeden Ratschlag sehr dankbar.
Es tut mir Leid, dass ich hierdurch euren Entwicklungsthread störe, ich hoffe das wird toleriert. Hab das ganze jetzt nachgebaut und habe dabei schon wilde Probleme, also Hut ab vor meigrafd, zu einer solchen Entwicklung gehört wirklich viel Wissen und Ehrgeiz!
Danke und Lg
User
So nun ist es mir endlich möglich den attiny ohne großen Aufwand zu beschreiben.
Habe das ganze nun einmal testweise auf einem Steckbrett aufgebaut, jedoch bringe ich keine Kommunikation zwischen den beiden zusammen (zumindest erscheint im Perl Script nichts). Diesbezüglich hätte ich 2 Fragen:
- Wie entscheidend ist das mit der Antennenlänge, wenn die Gerät nebeneinander stehen. Wenn ich nun an beiden RFM12B eine Antenne mit ca 16cm habe, sollte dies funktionieren?
- Würde der Sender auch senden, wenn ich den Sketch vom TMP36 verwende, jedoch keinen TMP36 habe? Die Spannungswerte sollten am anderen Ende trotzdem ankommen?
Danke im Voraus,
Lg User
//Aber das Problem dürfte wohl irgendwo am PI liegen. Habe nun eine Led am Sender und Empfänger angeschlossen. Diese blinken synchron, also sollte mann davon ausgehen können, dass die Kommunikation stattfindet, jedoch kommt am Raspberry scheinbar nichts an -.-
Oja ich habe die ArduinoIde leider am RPi laufen und dies scheint auch die Probleme zu machen?
Werde mir morgen einen Arduino Uno besorgen, dann kann ich das ganze mal so probieren, wie es alle hier im Forum machen....
Trotzdem herzlichsten Dank für deine tolle Unterstützung!
Lg User
Super danke, genau das wars. Tut mir leid, dass ich die überlesen habe. Jedoch ist das scheinbar noch immer nicht das letzte Problem. Der Compiler läuft nun deutlich länger und spuckt dann folgenden Fehler aus:
Zitat
avr-gcc: error: core.a: no such file or directory
Das ist doch ein wahnsinn, wieviele Probleme das compilen über den Raspberry mit sich bringt. Vermutlich wäre es wirklich das einfachste das ganze über den Arduino zu erledigen..
Mit diesem Sketch hat sich an dem ganzen leider nichts geändert, der Fehler sieht gleich aus. Soweit ich auf die Schnelle gesehen habe, ist dieser Sketch auch ident mit dem, welchen ich als letztes probiert hatte. Komisch ist nur, dass dies dieser Sketch ist, mit welchem [font="Tahoma, Verdana, Arial, sans-serif"]meigrafd [/font]scheinbar erfolg hatte.
Bzgl. diesem [font="Tahoma, Verdana, Arial, sans-serif"]Sleep-Mode-Standby wurde doch im Entwicklungsthread längere Zeit diskutiert, jedoch konnte ich hier leider nirgendwo den Lösungsweg finden, scheinbar hatte dies plötzlich einfach so funktioniert. ;([/font]
Danke für deine super Unterstützung!
lg User
Herzlichen dank, nun befindet sich die Arduino.h am selben Ort wie bei dir und dieser Fehler ist weg. Jedoch wäre es doch viel zu schön, wenn es der letzte Fehler wäre, nun kommt bei folgendem Sketch:
// Simple serial pass through program
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// It initializes the RFM12B radio with optional encryption and passes through any valid messages to the serial port[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// [/font][/color][color=#0000ff][font="Monaco, Consolas, Courier, monospace"]felix@lowpowerlab.com[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]#include <RFM12B.h>[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// You will need to initialize the radio by telling it what ID it has and what network it's on[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// The NodeID takes values from 1-127, 0 is reserved for sending broadcast messages (send to all nodes)[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// The Network ID takes values from 0-255[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// By default the SPI-SS line used is D10 on Atmega328. You can change it by calling .SetCS(pin) where pin can be {8,9,10}[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]#define NODEID 1 //network ID used for this unit[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]#define NETWORKID 99 //the network ID we are on[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]#define SERIAL_BAUD 115200[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]//encryption is OPTIONAL[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]//to enable encryption you will need to:[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// - to call .Encrypt(KEY) to start encrypting[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// - to stop encrypting call .Encrypt(NULL)[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]uint8_t KEY[] = "ABCDABCDABCDABCD";[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// Need an instance of the Radio Module[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]RFM12B radio;[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]void setup()[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]{[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] radio.Initialize(NODEID, RF12_433MHZ, NETWORKID);[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] radio.Encrypt(KEY); //comment this out to disable encryption[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// Serial.begin(SERIAL_BAUD);[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// Serial.println("Listening...");[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]}[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]void loop()[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]{[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] if (radio.ReceiveComplete())[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] {[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] if (radio.CRCPass())[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] {[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"]// Serial.print('[');Serial.print(radio.GetSender());Serial.print("] ");[/font][/color]
[color=#0000ff][font="Monaco, Consolas, Courier, monospace"] for (byte i = 0; i < *radio.DataLen; i++) //can also use radio.GetDataLen() if you don't like pointers[/font][/color]
// Serial.print((char)radio.Data);
if (radio.ACKRequested())
{
radio.SendACK();
// Serial.print(" - ACK sent");
}
}
// else
// Serial.print("BAD-CRC");
// Serial.println();
}
}
Alles anzeigen
folgender Fehler:
In file included from /root/sketchbook/libraries/RFM12B/Stream.h:26:0,
from /root/sketchbook/libraries/RFM12B/HardwareSerial.h:27,
from /root/sketchbook/libraries/RFM12B/Arduino.h:193,
from /root/sketchbook/libraries/RFM12B/RFM12B.h:15,
from receive.cpp:5:
/root/sketchbook/libraries/RFM12B/Print.h:32:0: warning: "BIN" redefined [enabled by default]
In file included from /usr/lib/gcc/avr/4.7.2/../../../avr/include/avr/iotn84.h:38:0,
from /usr/lib/gcc/avr/4.7.2/../../../avr/include/avr/io.h:350,
from /root/sketchbook/libraries/RFM12B/RFM12B.h:10,
from receive.cpp:5:
/usr/lib/gcc/avr/4.7.2/../../../avr/include/avr/iotnx4.h:71:0: note: this is the location of the previous definition
In file included from receive.cpp:5:0:
/root/sketchbook/libraries/RFM12B/RFM12B.h:200:136: error: ‘SLEEP_MODE_STANDBY’ was not declared in this scope
/root/sketchbook/libraries/RFM12B/RFM12B.h:202:113: error: ‘SLEEP_MODE_STANDBY’ was not declared in this scope
Alles anzeigen
Das sieht de Post #140 von meigrafd in seinem Entwicklungsthread wirklich sehr ähnlich, jedoch kann ich dort nirgendwo eine Lösung finden...
Lg User
Hallo,
danke. Habe es nun zumindest einmal hinbekommen einen Bootloader zu schreiben. Das ganze sah bei mir deutlich naders aus als bei dir. Habe das ganze dann einmal mit einer anderen Raspbian Version probiert, wo es auf anhieb ging?! Jedoch ist das ganze bei mir noch immer im Ordner tiny anstatt attiny...
Habe nun nach dem Bootloader gleich mal versucht folgenden Sketch zu compilieren:
// RFM12B Receiver for RaspberryPI
//
// Basiert zum Teil auf der Arbeit von Nathan Chantrell
//
// modified by meigrafd @ 16.12.2013 - for UART on RaspberryPI
//------------------------------------------------------------------------------
#include <RFM12B.h>
#include <avr/sleep.h>
#include <SoftwareSerial.h>
//------------------------------------------------------------------------------
// You will need to initialize the radio by telling it what ID it has and what network it's on
// The NodeID takes values from 1-127, 0 is reserved for sending broadcast messages (send to all nodes)
// The Network ID takes values from 0-255
// By default the SPI-SS line used is D10 on Atmega328. You can change it by calling .SetCS(pin) where pin can be {8,9,10}
#define NODEID 22 //network ID used for this unit
#define NETWORKID 210 //the network ID we are on
#define ACK_TIME 2000 // # of ms to wait for an ack
#define SERIAL_BAUD 9600
//------------------------------------------------------------------------------
// PIN-Konfiguration
//------------------------------------------------------------------------------
// UART pins
#define rxPin 7 // D7, PA3
#define txPin 3 // pin an den der 433 Mhz Sender angeschlossen ist (D3, PA7)
// LED pin
#define LEDpin 8 // D8, PA2 - set to 0 to disable LED
/*
+-\/-+
VCC 1| |14 GND
(D0) PB0 2| |13 AREF (D10)
(D1) PB1 3| |12 PA1 (D9)
RESET 4| |11 PA2 (D8)
INT0 PWM (D2) PB2 5| |10 PA3 (D7)
PWM (D3) PA7 6| |9 PA4 (D6)
PWM (D4) PA6 7| |8 PA5 (D5) PWM
+----+
*/
//encryption is OPTIONAL
//to enable encryption you will need to:
// - provide a 16-byte encryption KEY (same on all nodes that talk encrypted)
// - to call .Encrypt(KEY) to start en
// - to stop encrypting call .Encrypt(NULL)
//#define KEY "ABCDABCDABCDABCD"
// Initialise UART
SoftwareSerial mySerial(rxPin, txPin);
// Need an instance of the Radio Module
RFM12B radio;
//##############################################################################
static void activityLED (byte mode) {
pinMode(LEDpin, OUTPUT);
digitalWrite(LEDpin, mode);
}
// blink led
static void blink (byte pin, byte n = 3) {
pinMode(pin, OUTPUT);
for (byte i = 0; i < 2 * n; ++i) {
delay(100);
digitalWrite(pin, !digitalRead(pin));
}
}
// init Setup
void setup() {
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
mySerial.begin(SERIAL_BAUD);
radio.Initialize(NODEID, RF12_433MHZ, NETWORKID);
#ifdef KEY
radio.Encrypt((byte*)KEY); //comment this out to disable encryption
#endif
if (LEDpin) {
activityLED(1); // LED on
delay(1000);
activityLED(0); // LED off
}
}
// Loop
void loop() {
if (radio.ReceiveComplete()) {
if (radio.CRCPass()) {
//node ID of TX, extracted from RF datapacket. Not transmitted as part of structure
mySerial.print(radio.GetSender(), DEC);
mySerial.print(" ");
int i;
for (byte i = 0; i < *radio.DataLen; i++) //can also use radio.GetDataLen() if you don't like pointers
mySerial.print((char) radio.Data);
if (LEDpin) {
blink(LEDpin, 2);
}
if (radio.ACKRequested()) {
radio.SendACK();
}
} else {
mySerial.print("BAD-CRC");
if (LEDpin) {
activityLED(1); // LED on
delay(1000);
activityLED(0); // LED off
}
}
mySerial.println();
}
}
Alles anzeigen
Dabei tritt jedoch wieder ein Problem auf:
avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=attiny84 -DF_CPU=8000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=101$
receive.cpp:1:21: fatal error: Arduino.h: No such file or directory
compilation terminated.
Irgendwie will das bei mir leider alles nicht so einfach ;((
Danke und Lg
User
Habe das ganze auf eine frische SD-Karte gepackt, welche ich nun nur fürs ArduinoIDE nutzen würde, somit sollte das mit den rechten egal sein, da es in diesem Fall nichts zu verlieren gibt.
Das Verzeichnis /root/sketchbook/hardware/tiny/bootloaders/empty war vorerst nicht vorhanden habe dies aber natürlich händisch angelegt, jedoch machte dies keinen Unterschied. Aber der Ordner ist bei dir scheinbar auch leer?
Ich verstehe das auch nicht, wieso das ganze bei mir nur tiny heißt und nicht attiny. Mir ist beim Tutorial schon aufgefallen, dass ich diverse befehle von attiny auf tiny umbenennen musste, da dies bei mir anders heißt. Habe das ganze szenarion jedoch bereits drei mal hinter mir und der Ordner hieß immer so?!
Was steht in deiner /root/sketchbook/hardware/tiny/programmers.txt?
Welchen Programmer wählst du in der ArduinoIDE aus?
Danke und Lg
User
Hallo,
habe nun noch herausgefunden, dass man scheinbar auch noch eine "programmers.txt" unter /root/sketchbook/hardware/tiny/ mit folgenden Inhalt anlegen muss?
gpio0.name=Raspberry Pi GPIO (on-board)
gpio0.communication=gpio
gpio0.protocol=gpio0
gpio1.name=Raspberry Pi GPIO (external ISP)
gpio1.communication=gpio
gpio1.protocol=gpio1
In der ArduinoIDE kann ich nun den Raspberry als Programmer auswählen. Dabei wird dann immer eine Fehlermeldung ausgespuckt, dass scheinbar kein Bootloader zum überspielen gefunden werden kann?
avrdude: can't open input file /root/sketchbook/hardware/tiny/bootloaders/empty/empty84at8.hex: No such file or directory
avrdude: write to file '/root/sketchbook/hardware/tiny/bootloaders/empty/empty84at8.hex' failed
Wie komm ich zu dieser besagten "[font="Monaco, Consolas, Courier, monospace"]empty84at8.hex". Nun habe ich das ganze bereits 3x nach diesem Tutorial installiert, komme jedoch zu keinem Ergebnis. Was mich zudem wundert, sind die raren Informationen im Internet bzgl. Raspberry als ISP...[/font]
[font="Monaco, Consolas, Courier, monospace"]Danke und Lg[/font]
[font="Monaco, Consolas, Courier, monospace"]User[/font]
Hallo,
habe gestern bereits die µCs erhalten. Der Versand ging ja wirklich zackzack.
Nun gibt es allerdings schon die ersten Probleme. Habe versucht den µC so zu beschreiben, wie es meigrafd mit dem Raspberry in seinem Thread beschreibt. Bekomme dabei aber immer einen Fehler, wenn ich versuche den Bootloader zu schreiben. (siehe Anhang)
Habe nun schon etwas im Internet recherchiert, jedoch ist zu diesem Thema leider nicht wirklich viel zu finden, es sein den ich habe falsch gesucht.
Wäre es möglich, das es am "Programmer" scheitert. Meine irgendwo gelesen zu haben, dass man zu "boards.txt" auch noch eine "programmer.txt" anlegen muss?
Danke und Lg
User
Okay, super danke. Scheinbar kann man diese dann im Batteriebetrieb eigentlich kaum "abschießen"...
Ich lass mich überraschen. Jetzt heißt es erst mal warten.
Melde mich dann, wenn es erste Misserfolge oder gar Erfolge gibt..
Danke für deine wahnsinnig tolle Unterstützung!!!
Ich habe keine RFM12 sondern RFM12B bestellt und das jedesmal bisherDie von eBay waren zwar älter aber funktionieren super - die Vermutung (zu dem Zeitpunkt) auf defekt kam Aufgrund der Unkenntnis wieviel Spannung die Module maximal vertragen - das wurde aber später geklärt
Das von dir rausgesuchte JeeNode-Micro-v3 ist aber vergleichsweise wesendlich teurer - keine Ahnung was du vor hast aber du hattest eingangs gefragt wie du es günstig(er) realisieren kannst, deshalb hier mein Hinweis: JeeNode-Micro-v3 ist zu teuer und unerprobt (kA ob das für dieses Vorhaben geeignet is)
Hallo,
danke für deine Antwort natürlich will ich das Projekt so günstig wie möglich halten. Das mit den Modulen von JeeNode-Micro-v3 ist für mich sowieso nicht mehr möglich, da ich bereits bestellt habe.
Habe scheinbar gerade vorhin den falschen Link von Pollin gepostet. Habe genau diese bestellt, soeben nochmal bei der Bestellung nachgesehen. Also eh die RFM12B, welche jedoch tatsächlich nur eine Betriebsspannung von bis zu 3,8V haben. Diese sollten bereits auf dem Postweg sein. Ich glaube das dürften dann eh exakt die selben wie die von dir verwendeten sein? (laut des ersten Posts in deinem Threads ;))
Danke für eure Unterstützung!
Lg