[PORADNIK] Arduino IDE

NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

przykład z biblioteki Arduino IDE się porawnie skompilował ale kod który chce sprawdzić wywala błąd na :

supla_test:1:10: fatal error: srpc.h: No such file or directory
ResolveLibrary(srpc.h) 1 | #include <srpc.h>

| ^~~~~~~~
-> candidates: []
compilation terminated.
exit status 1
srpc.h: No such file or directory

pomimo ze biblioteka <srpc.h> znajduje się w SuplaDevice chodź w katalogu o ścieżce :

c:\Users\Lenovo V110\Documents\Arduino\libraries\SuplaDevice\src\supla-common\<srpc.h>

jak więc zrobić odnośnik a może coś innego dograć?

próbny kod to:

#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.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>

#define Pin_D1 5
#define Pin_D2 4
#define Pin_D6 12
#define Pin_D7 13

WiFiClient client;

// Setup Supla connection
const char* ssid = "XXXXX"; // MyWiFiNetwork
const char* password = "XXXXX"; // MyWiFiPassword

void setup() {
Serial.begin(115200);
delay(10);

// Replace the falowing GUID
char GUID[SUPLA_GUID_SIZE] = {0x3C,0x53,0x1E,0x87,0x58,0x95,0xDF,0xAE,0x68,0xE9,0x82,0x1E,0x8B,0xC2,0x99,0xD9};
// with GUID that you can retrieve from https://www.supla.org/arduino/get-guid

// MAC adres urządzenia
// Ethernet MAC address [84:F3:EB:73:5A:A4]
uint8_t mac[6] = {0x84, 0xF3, 0xEB, 0x73, 0x5A, 0xA4};

/*
* Having your device already registered at cloud.supla.org,
* you want to change CHANNEL sequence or remove any of them,
* then you must also remove the device itself from cloud.supla.org.
* Otherwise you will get "Channel conflict!" error.
*/

// CHANNEL0 - RELAY
SuplaDevice.addRelay(Pin_D1); // Pin number where the relay is connected
// Call SuplaDevice.addRelay(44, true) with an extra "true" parameter
// to enable "port value inversion"
// where HIGH == LOW, and LOW == HIGH

// CHANNEL1 - RELAY
SuplaDevice.addRelay(Pin_D2); // Pin number where the relay is connected

// CHANNEL2 - RELAY
SuplaDevice.addRelay(Pin_D6); // Pin number where the relay is connected

// CHANNEL3 - RELAY
SuplaDevice.addRelay(Pin_D7); // Pin number where the relay is connected

// CHANNEL4 - Opening sensor (Normal Open)
//SuplaDevice.addSensorNO(A0); // A0 - Pin number where the sensor is connected
// Call SuplaDevice.addSensorNO(A0, true) with an extra "true" parameter
// to enable the internal pull-up resistor


// CHANNEL5 - Opening sensor (Normal Open)
//SuplaDevice.addSensorNO(A1); // A1 - Pin number where the sensor is connected


// CHANNEL6 - DHT22 Sensor
// SuplaDevice.addDHT11();
// SuplaDevice.addAM2302();
// SuplaDevice.addDHT22();

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

}

void loop() {
SuplaDevice.iterate();
}

// 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) {

// Serial.println("WiFi init");
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.print("\nlocalIP: ");
Serial.println(WiFi.localIP());
Serial.print("subnetMask: ");
Serial.println(WiFi.subnetMask());
Serial.print("gatewayIP: ");
Serial.println(WiFi.gatewayIP());
}

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;
}
NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

kilku krotnie podmieniłem różne biblioteki SuplaDevice i błąd <srpc.h> już sie nie pojawił za to pojawił się nowy:

C:\Users\Lenovo V110\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp: In member function 'void SuplaDeviceClass::iterate()':
C:\Users\Lenovo V110\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp:1232:62: error: call of overloaded 'abs(long unsigned int)' is ambiguous
1232 | unsigned long time_diff = abs(_millis - last_iterate_time);
| ^
In file included from c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\cstdlib:75,
from c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\stdlib.h:36,
from C:\Users\Lenovo V110\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:27,
from C:\Users\Lenovo V110\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp:19:
c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\stdlib.h:74:5: note: candidate: 'int abs(int)'
74 | int abs (int);
| ^~~
In file included from c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\cstdlib:77,
from c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\stdlib.h:36,
from C:\Users\Lenovo V110\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\cores\esp8266/Arduino.h:27,
from C:\Users\Lenovo V110\Documents\Arduino\libraries\SuplaDevice\SuplaDevice.cpp:19:
c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\std_abs.h:79:3: note: candidate: 'constexpr long double std::abs(long double)'
79 | abs(long double __x)
| ^~~
c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\std_abs.h:75:3: note: candidate: 'constexpr float std::abs(float)'
75 | abs(float __x)
| ^~~
c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\std_abs.h:71:3: note: candidate: 'constexpr double std::abs(double)'
71 | abs(double __x)
| ^~~
c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\std_abs.h:61:3: note: candidate: 'long long int std::abs(long long int)'
61 | abs(long long __x) { return __builtin_llabs (__x); }
| ^~~
c:\users\lenovo v110\appdata\local\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.4-gcc10.3-1757bed\xtensa-lx106-elf\include\c++\10.3.0\bits\std_abs.h:56:3: note: candidate: 'long int std::abs(long int)'
56 | abs(long __i) { return __builtin_labs(__i); }
| ^~~
Znaleziono wiele bibliotek w "WiFiClient.h"
Wykorzystane: C:\Users\Lenovo V110\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi
Niewykorzystane: C:\Program Files (x86)\Arduino\libraries\WiFi
Użycie biblioteki SuplaDevice w wersji 1.5 z folderu: C:\Users\Lenovo V110\Documents\Arduino\libraries\SuplaDevice
Użycie biblioteki ESP8266WiFi w wersji 1.0 z folderu: C:\Users\Lenovo V110\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.0.2\libraries\ESP8266WiFi
exit status 1
Błąd kompilacji dla płytki Generic ESP8266 Module.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Ten program Tobie się nie skompliluje na nowej bibliotece. Musiałbyś pobrać sobie z githuba coś sprzed minimum 2 lat (albo i dalej), aby to skompilować.
Ale raczej nie tędy droga.
Lepiej zrobić to samo na nowej bilibotece.

Weź dowolny przykład z biblioteki i dodaj:

Kod: Zaznacz cały

// w headerach:
#include <supla/control/relay.h>

// w setup (tyle przekaźników ile potrzebujesz - podaj odpowiednie GPIO)
new Supla::Control::Relay(nr_gpio1);
new Supla::Control::Relay(nr_gpio2);
new Supla::Control::Relay(nr_gpio3);
new Supla::Control::Relay(nr_gpio4);
I tyle.
Ewentualnie, jeśli programowanie to nie Twój konik ;) to wygeneruj sobie program w Gui Generic - tam wszystko ustawisz z poziomu strony konfiguracyjnej www na module.
Widzimy się na Supla Offline Party vol. 2 :!:
muzycznykoles
Posty: 6
Rejestracja: śr mar 23, 2022 11:20 am

Posiada ktoś przykład z aktualnych bibliotek?

Pod Nodemcu v3 i Arduino IDE.

Może być prosty pod jeden przekaźnik czy jeden czujnik. Jak będę mięc szkielet to myślę, że sobie poradzę :)
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

muzycznykoles pisze: śr mar 23, 2022 11:27 am Posiada ktoś przykład z aktualnych bibliotek?

Pod Nodemcu v3 i Arduino IDE.

Może być prosty pod jeden przekaźnik czy jeden czujnik. Jak będę mięc szkielet to myślę, że sobie poradzę :)
W bibliotece są przykłady. Możesz je otworzyć np. z menu w Arduino IDE
Widzimy się na Supla Offline Party vol. 2 :!:
muzycznykoles
Posty: 6
Rejestracja: śr mar 23, 2022 11:20 am

Początkowo widziałem tylko z połączenień ethernetowym, ale faktycznie są z Nodemcu i połączeniem WIFI.

Dzięki :D
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

muzycznykoles pisze: śr mar 23, 2022 11:42 am Początkowo widziałem tylko z połączenień ethernetowym, ale faktycznie są z Nodemcu i połączeniem WIFI.

Dzięki :D
Czy zainstalowałeś bibliotekę z managera bibliotek w Arduino IDE?
Obecnie prawie każdy przykład jest na Arduino MEGA, ESP8266 i ESP32. W dużo starszej bibliotece przykłady były na Arduino Mega z chyba jednym wyjątkiem na ESP8266.
Widzimy się na Supla Offline Party vol. 2 :!:
andiw
Posty: 4
Rejestracja: czw maja 05, 2022 8:18 pm

Witam społeczność Supli
Po likwidacji Blynka szukałem nowej platformy i spodobała mi się Supla ze swoim zewnętrznym serwerem. Orłem w programowaniu nie jestem ale jak są dobre przykłady to daje sobie radę. Trochę przeglądałem to forum i przykłady z biblioteki ale nie znalazłem odpowiedzi na najbardziej podstawowe pytanie jak przesłać jakaś zmienna np int do supli jako np temperaturę, wilgotność. Załóżmy, że mam już działające urządzenie na arduino mini i mogę po soft serialu wysyłać dane do np nodemcu, który komunikował by się z Suplą. Nie interesuje mnie obsługa żadnych czujników, tylko wysłanie otrzymanych danych do supli.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

andiw pisze: czw maja 05, 2022 8:34 pm Witam społeczność Supli
Po likwidacji Blynka szukałem nowej platformy i spodobała mi się Supla ze swoim zewnętrznym serwerem. Orłem w programowaniu nie jestem ale jak są dobre przykłady to daje sobie radę. Trochę przeglądałem to forum i przykłady z biblioteki ale nie znalazłem odpowiedzi na najbardziej podstawowe pytanie jak przesłać jakaś zmienna np int do supli jako np temperaturę, wilgotność. Załóżmy, że mam już działające urządzenie na arduino mini i mogę po soft serialu wysyłać dane do np nodemcu, który komunikował by się z Suplą. Nie interesuje mnie obsługa żadnych czujników, tylko wysłanie otrzymanych danych do supli.
Tutaj masz przykład: viewtopic.php?p=121069#p121069
Tutaj trochę opisu "jak to się robi": viewtopic.php?p=85786#p85786
Widzimy się na Supla Offline Party vol. 2 :!:
andiw
Posty: 4
Rejestracja: czw maja 05, 2022 8:18 pm

Dzięki, o to chodziło, zaraz się w to "wgryzę"
ODPOWIEDZ

Wróć do „FAQ / Jak to zrobić”