Na gorąco chcę Was poinformować , że właśnie wstępnie zrobiłem jak w temacie czujnik działający na Moteino - czyli z bardzo małym poborem prądu pod skrzynkę na listy - mam tu na myśli zasilanie z bateryjne / akku. Zmodyfikowałem kod nadajnika @Robert Błaszczak plus moje wypociny z fragmentem kodu czytającego stan pinu A2 (docelowo będzie więcej pinów pod np czujniki kontaktronowe ).
Sprzęt działa - pin A2 bez VCC3,3V - stan "0" podanie VCC3.3V na pin A2 - stan "1".
Wiem , że pewnie dla wielu z Was zaawansowanych programistów jest napisanie czegoś takiego bardzo proste, ja natomiast dopiero raczkuje w tym temacie i się uczę ale sprawia mi to ogromną frajdę - jestem wręcz uzależniony od Supli (@pzygmunt czy jest jakaś terapia odwykowa ?
Ok - do rzeczy poniżej screen oraz kod nadajnika, niestety jeszcze teraz muszę wygłówkować jak
Code: Select all
"status" Code: Select all
SuplaDevice.addSensorNO(mail_sensor);Kod nadajnika 868MHz:
Code: Select all
/*
T/H Transmiter RB-10
Copyright (C) 2019 Robert Błaszczak
Niniejszy program jest wolnym oprogramowaniem; możesz go
rozprowadzać dalej i/lub modyfikować na warunkach Powszechnej
Licencji Publicznej GNU, wydanej przez Fundację Wolnego
Oprogramowania - według wersji 2-giej tej Licencji lub którejś
z późniejszych wersji.
Niniejszy program rozpowszechniany jest z nadzieją, iż będzie on
użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej
gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH
ZASTOSOWAŃ. W celu uzyskania bliższych informacji - Powszechna
Licencja Publiczna GNU.
Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz
Powszechnej Licencji Publicznej GNU (GNU General Public License);
jeśli nie - napisz do Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA.
*/
#include <Wire.h> //Zawarty w Arduino IDE (www.arduino.cc)
#include <SPI.h> //Zawarty w Arduino IDE (www.arduino.cc)
#include <RFM69_ATC.h> //Pobierz z: https://github.com/lowpowerlab/rfm69
#include <SPIFlash.h> //Pobierz z: https://github.com/lowpowerlab/spiflash
#include <LowPower.h> //Pobierz z: https://github.com/lowpowerlab/lowpower
#define NODEID 1 // Unikalny numer transmitera (1 - 6) pracującego w sieci o takim samym ID, który jest jednocześnie numerem czujnika w SUPLA Cloud.
#define NETWORKID 101 // Numer sieci (1 - 254) w której działą bramka RB-10G oraz inne transmitery. Bramka oraz max. 6 transmiterów musi działać w sieci o takim samym ID.
#define GATEWAYID 2 // Numer bramki (0 - 254), do której łączy się transmiter.
#define FREQUENCY RF69_868MHZ //Jeśli posiadasz moduł radiowy pracujący z inną częstotliwością zamień parametr na RF69_433MHZ lub RF69_915MHZ.
//#define IS_RFM69HW_HCW //Usuń zacznik komentarza, jeśli posiadasz moduł radiowy w wersji RFM69HW/HCW.
#define ENCRYPTKEY "qwertyuiopasdfgh" //Klucz kodowania - 16 znaków (ani mniej, ani więcej) - identyczny w bramce RB-10G i we wszystkich transmiterach.
#define ENABLE_ATC //Wstaw znacznik komentarza jeśli chcesz wyłączyć automatyczną kontrolę transmisji (ATC).
#define ATC_RSSI -80 //Poziom sygnału radiowego (odcięcie) dla ATC.
period_t sleepTime = SLEEP_4S; //Zdefiniowany czas uśpienia transmitera 4 sekundy (zgodnie z LowPower library (LowPower.h)).
#define SEND_LOOPS 1
#define BATT_READ_LOOPS SEND_LOOPS * 1
//#define SEND_LOOPS 13 //Ilość pętli uśpienia transmitera (np. 4 sekundy * 15 = 60 sekund). Ilość pętli należy dobrać do konkretnej płytki Monteino.
//#define BATT_READ_LOOPS SEND_LOOPS * 30 //Ilość pętli, po których wykonywany jest pomiar napięcia na baterii (np. 60 sekund * 30 = 30 minut).
#define MAIL_READ_LOOPS SEND_LOOPS * 1
#define SERIAL_ENABLE //Usuń znaki komentarza '//' aby włączyć wyświetlanie na porcie szeregowym.
#define BATT0 730 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 0 (3.10V).
#define BATT1 1002 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 1 (3.20V).
#define BATT2 1008 //Odczytana wartość napięcia BATTx poniżej której poziom baterii ustawiany jest na wartość 2 (3.25V).
#ifdef SERIAL_ENABLE
#define SERIAL_BAUD 115200
#define SP(input) {Serial.print(input);}
#define SPln(input) {Serial.println(input);}
#define SFLUSH() {Serial.flush();}
#else
#define SERIAL_BAUD 115200
#define SP(input);
#define SPln(input);
#define SFLUSH();
#endif
//#######################################################################
#define mail_sensor A2 // - nr pinu czujnika - w moteino oznzaczony "A2"
//#######################################################################
RFM69_ATC radio;
SPIFlash flash(SS_FLASHMEM, 0xEF30);
char Mstr[10];
char Bstr[10];
double B,M;
char buffer[60];
int status = HIGH;
int32_t retries = 0;
void setup() {
Serial.begin(SERIAL_BAUD);
radio.initialize(FREQUENCY, NODEID, NETWORKID);
#ifdef IS_RFM69HW_HCW
radio.setHighPower();
#endif
radio.encrypt(ENCRYPTKEY);
radio.enableAutoPower(ATC_RSSI);
sprintf(buffer, "| Skrzynka pocztowa | SUPLA TRANSMITER R@F %d MHz.", FREQUENCY==RF69_433MHZ ? 433 : FREQUENCY==RF69_868MHZ ? 868 : 915);
SPln(buffer);
Wire.begin();
Wire.setClock(500000);
if (flash.initialize()) flash.sleep();
for (uint8_t i=0; i<=A5; i++)
{
if (i == RF69_SPI_CS) continue;
if (i == SS_FLASHMEM) continue;
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
pinMode(A1, INPUT);
SFLUSH();
}
char input = 0;
unsigned long sendLoops = 0;
unsigned long battReadLoops = 0;
unsigned long mailReadLoops =0;
word Battery1024 = 0;
byte BatteryLevel = 0;
word newstatus;
byte sendLen;
void loop() {
ReadMail();
if (battReadLoops--<=0) {
ReadBattery();
battReadLoops = BATT_READ_LOOPS-1;
}
if (mailReadLoops--<=0) {
ReadMail();
mailReadLoops = MAIL_READ_LOOPS-1;
}
if (sendLoops--<=0) {
sendLoops = SEND_LOOPS-1;
dtostrf(BatteryLevel, 0, 0, Bstr);
dtostrf(status, 0, 0, Mstr);
sprintf(buffer, "%s|%s", Bstr, Mstr);
sendLen = strlen(buffer);
radio.sendWithRetry(GATEWAYID, buffer, sendLen);
SP(" Wysłane dane: "); SP(buffer); SPln();
}
if (radio.receiveDone()) {
SPln();
}
SFLUSH();
flash.sleep();
radio.sleep();
LowPower.powerDown(sleepTime, ADC_OFF, BOD_OFF);
SPln("SLEEP");
}
void ReadMail(){
int newstatus = digitalRead(mail_sensor);
if (((newstatus == HIGH) ? "1" : "0")) {
status = newstatus;
}
else if (--retries == 0) {
status = newstatus;
}
SP("STAN_SKRZYNKI: "); SP(newstatus);
}
void ReadBattery() {
unsigned int readings = 0;
analogWrite(A0, 1024);
for (byte i = 0; i < 6; i++)
readings += analogRead(A1);
analogWrite(A0, 0);
Battery1024 = (readings / 3);
if (Battery1024 >= BATT2) {
BatteryLevel = 3;
}
else if (Battery1024 < BATT2 && Battery1024 >= BATT1) {
BatteryLevel = 2;
}
else if (Battery1024 < BATT1 && Battery1024 >= BATT0) {
BatteryLevel = 1;
}
else if (Battery1024 < BATT0) {
BatteryLevel = 0;
}
SP(" BATTx: "); SP(Battery1024); SP(" | Poziom baterii (0 - 3): ");SPln(BatteryLevel);
}