Thingspeak + esp8266 + вольтметр = как?

Тема в разделе "Проводная и беспроводная связь", создана пользователем DYm00n, 6 мар 2016.

  1. DYm00n

    DYm00n Нерд

    Возникла такая проблема - данная система настроена на отправление температуры и влажности на thingspeak, но работает от powerbank, соответственно, хотелось бы настроить и "отправку" данных касательно напряжения на thingspeak, вот только сижу и не могу понять как мне это сделать. Может кто видел скетчи подобные? Про "точность" данных я наслышан, но мне атомная точность и не нужна
     
  2. ИгорьК

    ИгорьК Гуру

    Если вы настроили на отправку температуры и влажности, почему не настроили и на напряжение - забыли?
     
  3. DYm00n

    DYm00n Нерд

    Скажу честно - я не знаю как снять и передать показания напряжения без использования каких либо датчиков
     
  4. ИгорьК

    ИгорьК Гуру

    Но данные температуры передали же?
     
  5. DYm00n

    DYm00n Нерд

    Скетч готовый нашел...
     
  6. ИгорьК

    ИгорьК Гуру

    Ну... значит требуется его переработка. А Вы, честно говоря, здесь абстракции рассказываете. Не понятно что за скетч, что за среда программирования...
     
  7. DYm00n

    DYm00n Нерд

    Что переработка это понятно. Я спрашиваю, может кто подскажет - если я через монитор порта вижу данные (какие либо), в моем случае - напряжение у банка, то сильно скетч нужно изменить, чтобы данные в thingspeak перенаправлять, или запараллелить с монитором порта?
     
  8. ИгорьК

    ИгорьК Гуру

    Не сильно. Ответ устроил? :)
     
  9. DYm00n

    DYm00n Нерд

    Я сам понимаю, что не сильно. Хотелось бы подробностей, если можно...
     
  10. ИгорьК

    ИгорьК Гуру

    :) остановитесь. Подумайте. Какие могут быть подробности, если вы не рассказали о том, как вы отправляете данные :)
     
  11. DYm00n

    DYm00n Нерд

    Мне почему то кажется, чтобы выводить данные на 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);
    }
     
  12. AlexVS

    AlexVS Гик

    Вы хотите что бы кто-то сказал вам какие изменения нужно внести в ваш скетч, для отправки доп.данных, но при этом не хотите показать текст скетча полностью?
    Вот нафига вы в предыдущем посте кусок кода запостили? Что вы этим хотели сказать или спросить?
     
  13. DYm00n

    DYm00n Нерд

    1. в моем первичном вопросе было - нужно снимать показания напряжения, только не знаю как
    2. приложенный выше скетч я приложил для того, чтобы хоть как то понять - как правильно переадресовывать данные в thingspeak, при этом, это полный скетч для снятия данных с фоторезистора
     
  14. AlexVS

    AlexVS Гик

    Непонятно все таки, у вас уже есть данные о напряжении или нет?
    Может все же вы целиком весь свой скетч покажете? Иначе вам никто не поможет.
     
  15. DYm00n

    DYm00n Нерд

    Данные о напряжении нет, я не знаю как снять их.

    Сейчас вот полный скрипт для передачи данных о температуре

    Код (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);
    }
     
     
  16. DYm00n

    DYm00n Нерд

    Третий день борюсь с проблемой, есть допиленный вышевыложенный скетч
    Код (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
     
     
  17. Tomasina

    Tomasina Сушитель лампочек Модератор

    Вот как корректно измерять собственное напряжение без всяких внешних датчиков: tim4dev.com/arduino-secret-true-voltmeter/
     
  18. DYm00n

    DYm00n Нерд

    Есть у кого идеи, почему скетч данные не выгружает?
     
  19. DYm00n

    DYm00n Нерд