Возникла такая проблема - данная система настроена на отправление температуры и влажности на thingspeak, но работает от powerbank, соответственно, хотелось бы настроить и "отправку" данных касательно напряжения на thingspeak, вот только сижу и не могу понять как мне это сделать. Может кто видел скетчи подобные? Про "точность" данных я наслышан, но мне атомная точность и не нужна
Скажу честно - я не знаю как снять и передать показания напряжения без использования каких либо датчиков
Ну... значит требуется его переработка. А Вы, честно говоря, здесь абстракции рассказываете. Не понятно что за скетч, что за среда программирования...
Что переработка это понятно. Я спрашиваю, может кто подскажет - если я через монитор порта вижу данные (какие либо), в моем случае - напряжение у банка, то сильно скетч нужно изменить, чтобы данные в thingspeak перенаправлять, или запараллелить с монитором порта?
остановитесь. Подумайте. Какие могут быть подробности, если вы не рассказали о том, как вы отправляете данные
Мне почему то кажется, чтобы выводить данные на thingspeak нужно просто вставить какой либо шаблонный текст в скетч, типа - добавил нужные библиотеки (если нужны), объявил новую переменную и перенаправил данные не в монитор порта, а на thingspeak. Вот для примера скетч по считываю данных и вывода их в монитор порта по фоторезистору Код (C++): int sensorPin = A0; // устанавливаем входную ногу для АЦП unsigned int sensorValue = 0; // цифровое значение фоторезистора void setup() { pinMode(13, OUTPUT); Serial.begin(9600); // старт последовательного вывода данных (для тестирования) } void loop() { sensorValue = analogRead(sensorPin); // считываем значение с фоторезистора Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) Serial.println(""); delay(500); }
Вы хотите что бы кто-то сказал вам какие изменения нужно внести в ваш скетч, для отправки доп.данных, но при этом не хотите показать текст скетча полностью? Вот нафига вы в предыдущем посте кусок кода запостили? Что вы этим хотели сказать или спросить?
1. в моем первичном вопросе было - нужно снимать показания напряжения, только не знаю как 2. приложенный выше скетч я приложил для того, чтобы хоть как то понять - как правильно переадресовывать данные в thingspeak, при этом, это полный скетч для снятия данных с фоторезистора
Непонятно все таки, у вас уже есть данные о напряжении или нет? Может все же вы целиком весь свой скетч покажете? Иначе вам никто не поможет.
Данные о напряжении нет, я не знаю как снять их. Сейчас вот полный скрипт для передачи данных о температуре Код (C++): #include <ESP8266WiFi.h> // Импортируем библиотеку для работы с esp8266 #include <OneWire.h> //Библиотека для работы с OneWire OneWire ds(2); // Инициализируем OneWire шину на 2 порте //надо подтянуть резистором на 4,7к к плюсу ! const char *ssid = "..."; //Имя вашей WIFI сети const char *password = "..."; // Пароль вашей Wifi сети const char* host = "184.106.153.149";//Ip Сервера TS const char* privateKey = "...";//API KEY TS byte addr[8]; float temperature; //Переменная с температурой float getTemp(){ byte data[12]; if (!ds.search(addr)) { Serial.println("No more addresses."); while(1); } ds.reset_search(); if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); while(1); } ds.reset(); ds.select(addr); ds.write(0x44); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds.read(); } int raw = (data[1] << 8) | data[0]; if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; return raw / 16.0; } void setup() { Serial.begin(115200); // Скорость общения delay(10); //Даем запустится вафле Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); //Соединяемся с роутером WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); //Если не подключен то выведем точку Serial.print("."); } //Подключились , напишем инфу о соединении в Serial Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { //Пишем в сериал то что мы подключаемся Serial.print("connecting to "); Serial.println(host); // Используем WiFi клиент WiFiClient client; const int httpPort = 80; //Порт сервера if (!client.connect(host, httpPort)) { Serial.println("connection failed"); // пишем ошибку return; } temperature = getTemp(); // получаем температуру с датчика // Создаем URL с запросом для сервера String url = "/update?key="; url += privateKey; url += "&field1="; //Вместо field1 ставим нужный график url += temperature; Serial.print("Requesting URL: "); Serial.println(url); // Отправляем запрос на сервер client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(10); // Если сервер ответил то передадим ответ в сериал порт while(client.available()){ String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); //ждем 1000*5*60 - 5 минут и опять отправляем инфу delay(1000*5*60); }
Третий день борюсь с проблемой, есть допиленный вышевыложенный скетч Код (C++): #include <ESP8266WiFi.h> // Импортируем библиотеку для работы с esp8266 #include <OneWire.h> //Библиотека для работы с OneWire OneWire ds(2); // Инициализируем OneWire шину на 2 порте //надо подтянуть резистором на 4,7к к плюсу ! const int pinPhoto = A0; int raw = 0; const char *ssid = "***"; //Имя вашей WIFI сети const char *password = "***"; // Пароль вашей Wifi сети const char* host = "184.106.153.149";//Ip Сервера TS const int httpPort = 80; //Порт сервера const char* privateKey = "мой ключ";//API KEY TS byte addr[8]; float temperature; //Переменная с температурой float getTemp() { byte data[12]; if (!ds.search(addr)) { Serial.println("No more addresses."); while (1); } ds.reset_search(); if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); while (1); } ds.reset(); ds.select(addr); ds.write(0x44); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for (int i = 0; i < 9; i++) { data[i] = ds.read(); } int raw = (data[1] << 8) | data[0]; if (data[7] == 0x10) raw = (raw & 0xFFF0) + 12 - data[6]; return raw / 16.0; } void setup() { Serial.begin(115200); pinMode( pinPhoto, INPUT );// Скорость общения delay(10); //Даем запустится вафле Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); //Соединяемся с роутером WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); //Если не подключен то выведем точку Serial.print("."); } //Подключились, напишем инфу о соединении в Serial Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void loop() { //Пишем в сериал то что мы подключаемся Serial.print("connecting to "); Serial.println(host); // Используем WiFi клиент WiFiClient client; WiFiClient client2; if (!client.connect(host, httpPort) && !client2.connect(host, httpPort)) { Serial.println("connection failed"); // пишем ошибку return; } temperature = getTemp(); // получаем температуру с датчика raw = analogRead( pinPhoto ); String url = "/update?key="; url += privateKey; url += "&field2="; url += raw; String url2 = "/update?key="; url2 += privateKey; url2 += "&field3="; url2 += temperature; // Отправляем запрос на сервер client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n"); Serial.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n"); client2.print(String("GET ") + url2 + " HTTP/1.1\r\n" + "Host: " + host + "\r\n"); Serial.print(String("GET ") + url2 + " HTTP/1.1\r\n" + "Host: " + host + "\r\n"); delay(10); // Если сервер ответил то передадим ответ в сериал порт while (client.available()) { String line = client.readStringUntil('\r'); } while (client2.available()) { String line = client2.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); delay(1000 * 60); } Смысл данной затеи - одновременно (или с минимальной задержкой) снимать показания с DS18B20 и фоторезистора и выкладывать их. Но проблема с этим скетчем такая - по монитору порта - все ок, но на сайте данные не появляются. API для сайта точно верный. Монитор порта выдает Код (Text): Connecting to "***" ...... WiFi connected IP address: 192.168.88.227 connecting to 184.106.153.149 GET /update?key=мой ключ&field2=21.62 HTTP/1.1 Host: 184.106.153.149 GET /update?key=мой ключ&field3=1024 HTTP/1.1 Host: 184.106.153.149
Вот как корректно измерять собственное напряжение без всяких внешних датчиков: tim4dev.com/arduino-secret-true-voltmeter/