Odczyt danych temperatury z DHT11 w Ardurino IDE
Dobrze, działa. Dziękuję za cenną podpowiedź @piomar2 teraz zaczynają się schodki w mojej głowie. Zależy mi teraz na dodaniu możliwości sterowania stanem przekaźników poprzez przyciski podpięte do któryś gpio, tak aby móc sterować przekaźnikiem na przemiennie z przełącznika na ścianie z suplą
Pozdrawiam
Kod: Zaznacz cały
//----------------------------------------------------------
// podanie "0" na 12 (D6) wlacza 13 (D7), "1" gasi 13
SuplaDevice.addRelayButton(13, 12, INPUT_TYPE_BTN_BISTABLE);
//----------------------------------------------------------
Dodam jeszcze, że muszę to wykonać na przyciskach zwykłych (nie tych dzwonkowych). Nie wiem jak rozwiązać problem, który powstał mi w głowie odnośnie dodania tych fizycznych przełączników. Chyba wiem jak to wykonać z użyciem tych przełączników dzwonkowych, lecz nie wiem jak to wykonać z użyciem tradycyjnych wyłączników. W oparciu o wątek o nauce tworzenia własnych firmwaerów na forum powstało u mnie tak coś:
Mój zamysł nie działa do końca, ponieważ po podaniu LOW fizycznym przyciskiem na gpio16 zostaje zablokowana możliwość zmianu stanu przekaźnika poprzez suple... Występują również duże opóźnienia w raportowaniu stanu przekaźnika do supli spowodowane przez delay, ale nie byłem pewien jakie wartości będą odpowiednie.
Kod: Zaznacz cały
//arduino 1.8.3, wemos mini
//DHT11 na pinie D4 GPIO2
#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <IEEE754tools.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <WiFiServer.h>
#include <Wire.h>
#include <DHT.h>
#define DHTPIN 2 //pin pod którym jest nasz czujnik DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
WiFiClient client;
const char* ssid = "wlan-g";
const char* password = "Aligator1";
int button1 = 0; //wartosc początkowa dla przycisku 1
int button2 = 0; //wartosc początkowa dla przycisku 1
//----------------- DHT11 ---------------------------------------
void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {
*temp = dht.readTemperature();
*humidity = dht.readHumidity();
if ( isnan(*temp) || isnan(*humidity) ) {
*temp = -275;
*humidity = -1;
}
}
//--------------------------------------------------------
void setup() {
pinMode (16, INPUT_PULLUP); //ustawiamy Pin 16 (D0) na przycisk
Serial.begin(115200);
dht.begin();
delay(10);
SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
// with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
// Replace the falowing GUID
char GUID[SUPLA_GUID_SIZE] = {0x8C,0xB1,0xEF,0x66,0x3B,0xEB,0x50,0x0F,0x9F,0x8F,0xE3,0xF5,0xD8,0x71,0x78,0x6F};
// Ethernet MAC address
uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
// CHANNEL0 - DHT11
SuplaDevice.addDHT11();
// CHANNEL1 - Kontraktron
SuplaDevice.addSensorNO(4);
// CHANNEL2 - RELAY
SuplaDevice.addRelay(12, true); // d6
// CHANNEL3 - RELAY
SuplaDevice.addRelay(13, true); // d7
SuplaDevice.setName("testowe");
SuplaDevice.begin(GUID, // Global Unique Identifier
mac, // Ethernet MAC address
"svr14.supla.org", // SUPLA server address
#####, // Location ID
"####"); // Location Password
}
//--------------------------------------------------------
void loop() {
SuplaDevice.iterate();
//osługa przełączników
//przełącznik 1
TSD_SuplaChannelNewValue przycisk1; //ustaw nazwe dla przycisku
przycisk1.SenderID = 1; // Powiadom clouda, że załączasz recznie. W przypadku siłowników ma być 0
przycisk1.ChannelNumber = 2; // nr kanału przekaźnika
przycisk1.DurationMS = 0; //czas wlaczenia
button1 = digitalRead(16);
if(digitalRead(16)==LOW){
delay(100);
if(digitalRead(16)==LOW){
if(button1 == 0) { //jesli wylaczony to wlacz
przycisk1.value[1] = !przycisk1.value[0];
SuplaDevice.channelSetValue(&przycisk1);
button1 = 1;
while(digitalRead(16)==LOW);
delay(20);
}
if(button1 == 1) { //jesli wlaczaony to wlacz
przycisk1.value[0] = !przycisk1.value[0];
SuplaDevice.channelSetValue(&przycisk1);
button1 = 0;
while(digitalRead(16)==LOW);
delay(20);
}
}
}
//przełącznik 2
TSD_SuplaChannelNewValue przycisk2;
przycisk2.SenderID = 1;
przycisk2.ChannelNumber = 3;
przycisk2.DurationMS = 0;
button1 = digitalRead(14);
if(digitalRead(14)==LOW){
delay(100);
if(digitalRead(14)==LOW){
przycisk2.value[0] = !przycisk2.value[0];
SuplaDevice.channelSetValue(&przycisk2);
while(digitalRead(14)==LOW);
delay(20);
}
}
}
//--------------------------------------------------------
// Supla.org ethernet layer
int supla_arduino_tcp_read(void *buf, int count) {
_supla_int_t size = client.available();
if ( size > 0 ) {
if ( size > count ) size = count;
return client.read((uint8_t *)buf, size);
};
return -1;
};
int supla_arduino_tcp_write(void *buf, int count) {
return client.write((const uint8_t *)buf, count);
};
bool supla_arduino_svr_connect(const char *server, int port) {
return client.connect(server, 2015);
}
bool supla_arduino_svr_connected(void) {
return client.connected();
}
void supla_arduino_svr_disconnect(void) {
client.stop();
}
void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
SuplaDeviceCallbacks cb;
cb.tcp_read = &supla_arduino_tcp_read;
cb.tcp_write = &supla_arduino_tcp_write;
cb.eth_setup = &supla_arduino_eth_setup;
cb.svr_connected = &supla_arduino_svr_connected;
cb.svr_connect = &supla_arduino_svr_connect;
cb.svr_disconnect = &supla_arduino_svr_disconnect;
cb.get_temperature = NULL;
cb.get_temperature_and_humidity = &get_temperature_and_humidity;
cb.get_rgbw_value = NULL;
cb.set_rgbw_value = NULL;
return cb;
}
Pozdrawiam
sprawdziłem tą opcję:
Niestety w bilblio SuplaDevice nie ma addRelayButton i dostaje błąd kompilacji...
Kod: Zaznacz cały
//----------------------------------------------------------
// podanie "0" na 12 (D6) wlacza 13 (D7), "1" gasi 13
SuplaDevice.addRelayButton(13, 12, INPUT_TYPE_BTN_BISTABLE);
//--------
- Załączniki
-
- Screenshot_1.jpg (34.76 KiB) Przejrzano 1826 razy
Pozdrawiam