Rozwój biblioteki dla arduino

Masz pomysł na funkcjonalność lub koncepcję na rozwój projektu. Opisz wszystko tutaj.
arturkmat
Posts: 40
Joined: Wed Jul 05, 2017 9:45 pm
Location: Ostrzeszów

Post

Dzięki akurat tego nie zauważyłem ,że tego nie wymazałem :-p
Tutaj próbowałem użyć przycisku, znalazłem gdzieś na forum.

Code: Select all

if(digitalRead(15)==HIGH){
TSD_SuplaChannelNewValue value;
value.SenderID = 0;
value.ChannelNumber = 2892; // należy wskazać numer kanału na którym jest przekaźnik
value.DurationMS = 0; 
value.value[0] = 1; // Załączony = 1, Wyłączony = 0
SuplaDevice.channelSetValue(&value);
}
Chcę jak najwięcej zrobić kanałów aby na jednym urządzeniu zastosować w tylu miejscach ile to możliwe. Planuję podpiąć pcf8574 :lol: aby wykorzystać cały potencjał esp8266
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Aby użyć pcf'a należy uruchomić komunikacje po I2c i zmodyfikować bibliotekę supladevice.
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Co do tego fragmentu kodu , to jak pisałem wcześniej wartość channel nie może mieć taka wartość .
Każdy zadeklarowany przekaźnik to 1 kanał licząc od 0
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
arturkmat
Posts: 40
Joined: Wed Jul 05, 2017 9:45 pm
Location: Ostrzeszów

Post

a to nie jest czasem numer kanału z supla cloud ?
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Tak , ale konkretnego urządzenia
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
arturkmat
Posts: 40
Joined: Wed Jul 05, 2017 9:45 pm
Location: Ostrzeszów

Post

Okej poszedłem trochę do przodu już steruje diodą przyciskiem tylko że przyciskając przycisk świeci tylko w tym momencie , w aplikacji ładnie jest to zsynchronizowane. Gdy nacisnę przycisk w aplikacji to dioda tylko raz mrugnie i koniec. :-/ chciałbym aby to zaczęło działać jak zatrzask naciskam świeci naciskam drugi raz gaśnie

Code: Select all

/**
 * Supla.org NodeMCU WiFi minimal example
 * Author: Programistyk - Kamil Kaminski <[email protected]>
 * 
 * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE
 */
#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>
#include <DHT.h>
#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>

WiFiClient client;
const char* ssid     = "xxxx;
const char* password = "xxxx";

void setup() {
  Serial.begin(115200);
  pinMode(16,INPUT_PULLUP);  
  char GUID[SUPLA_GUID_SIZE] = {0000000000000000000000000000000000000000000000000000};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
  uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  // Przekaźniki
  SuplaDevice.addRelay(5);            
  SuplaDevice.addRelay(4);
  SuplaDevice.addRelay(14);
  SuplaDevice.addRelay(13);
  SuplaDevice.addRelay(15);

  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "xxxx",  // SUPLA server address
                    xxxx,                 // Location ID 
                    "xxxx");               // Location Password

}

void loop() {
SuplaDevice.iterate();
TSD_SuplaChannelNewValue value;
value.SenderID = 0;
value.ChannelNumber = 3; // należy wskazać numer kanału na którym jest przekaźnik
value.DurationMS = 0;
value.value[0] = 0; // Załączony = 1, Wyłączony = 0

if(digitalRead(16)==LOW){
TSD_SuplaChannelNewValue value;
value.SenderID = 0;
value.ChannelNumber = 3; // należy wskazać numer kanału na którym jest przekaźnik
value.DurationMS = 0;
value.value[0] = 1;
SuplaDevice.channelSetValue(&value);
}
else{
  SuplaDevice.iterate();
TSD_SuplaChannelNewValue value;
value.SenderID = 0;
value.ChannelNumber = 3; // należy wskazać numer kanału na którym jest przekaźnik
value.DurationMS = 0;
	value.value[0] = 0;
 SuplaDevice.channelSetValue(&value);
}
}
    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 = NULL;
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          return cb;
}
User avatar
shimano73
Posts: 2174
Joined: Sun Feb 28, 2016 12:27 pm
Location: Orzesze
Been thanked: 1 time

Post

Przyjrzyj się swojemu programowi , działa tak jak napisałeś.
Naciskasz przycisk świeci, puszczasz nie świeci. Musisz zapamiętać stan naciśnięcia przycisku np

jeśli gpio16 = 0 to jesli przekaźnik=low to przekaźnik=high
jeśli przekaźnik =high to przekaźnik=low
napisałem to na naprędce z telefonu , ale co w ten deseń
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie

Wezmę udział w Supla Offline Party 2024 :)
arturkmat
Posts: 40
Joined: Wed Jul 05, 2017 9:45 pm
Location: Ostrzeszów

Post

Udało się :-D

Code: Select all

/**
 * Supla.org NodeMCU WiFi minimal example
 * Author: Programistyk - Kamil Kaminski <[email protected]>
 * 
 * This example shows how to configure SuplaDevice for building for NodeMCU within Arduino IDE
 */
int button1 = 0;  //set value in button 1
#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>
#include <DHT.h>
#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>

WiFiClient client;
const char* ssid     = "MyWiFiNetwork";
const char* password = "MyWiFiPassword";

void setup() {
  Serial.begin(115200);
  pinMode(16,INPUT_PULLUP);  
  char GUID[SUPLA_GUID_SIZE] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
  uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  // Przekaźniki
  SuplaDevice.addRelay(5);            
  SuplaDevice.addRelay(4);

  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr1.supla.org",  // SUPLA server address
                    0,                 // Location ID 
                    "");               // Location Password

}

void loop() {
SuplaDevice.iterate();
TSD_SuplaChannelNewValue value1; //Set value name
value1.SenderID = 0; // Notify other users that your smartphone opens a blind. In case of actuators is to be 0
value1.ChannelNumber = 3; // Need enter the relay channel number
value1.DurationMS = 0; //turn on time

button1 = digitalRead(16); 
if(digitalRead(16)==LOW){
value1.value[0] = !value1.value[0]; 
SuplaDevice.channelSetValue(&value1);
while(digitalRead(16)==LOW);
delay(20);
}
}
    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 = NULL;
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          return cb;
}
arturkmat
Posts: 40
Joined: Wed Jul 05, 2017 9:45 pm
Location: Ostrzeszów

Post

wiem akurat to wiedziałem tylko myślałem że supla nie będzie chciała tak działać ;-) Myślałem ,że gdy nacisnę przycisk to nie będę mógł sterować suplą i odwrotnie ale działa. Dzięki za pomoc
adamz
Posts: 2
Joined: Sun Nov 19, 2017 10:42 pm

Post

A jak zrobić żeby włącznik działał bez połączenia z internetem.
I czy da raze zrobić że po przywróceniu sieci wskaże aktualny stan przekaźnika?

Return to “Pomysły i koncepcje”