Работа ADS1115 с NodeMCU v3

Тема в разделе "ESP8266, ESP32", создана пользователем Zvere4ek, 27 фев 2019.

  1. Zvere4ek

    Zvere4ek Нерд

    Друзья, я подключил модуль ADS1115 к NodeMCU v3 и почему-то NodeMCU не может получить с него правильные показания напряжения (со входов А0, А1, А2, А3). При чём если ADS1115 подключить по похожей схеме к Ардуино Нано и залить практически один и тот же скетч, то всё работает!
    ADS1115.jpg
    Код (C++):
    #include <Wire.h>
    #include <Adafruit_ADS1015.h>
    Adafruit_ADS1115 ads;

    void setup(void)
    {
      Wire.begin(D1, D2); //(SDA, SCL)
      Serial.begin(9600);

      ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV   0.1875mV (default)
      ads.begin();
    }

    void loop(void)
    {
      int16_t adc0;
      adc0 = ads.readADC_SingleEnded(0);

      Serial.print("AIN0: ");
      Serial.println(adc0);
      Serial.print("Напряжение: ");
      Serial.print(float((adc0*0.1875)/1000.0));
      Serial.println("В");
      delay(1000);
    }

    При работе с NodeMCU в мониторе порта напряжение равно 0 (хотя должно быть 2,2 В, т.к. на резистивный делитель напряжения подаётся 3,3 В)
    При работе с Ардуино Нано в мониторе порта напряжение равно 3,3 В (т.к. на резистивный делитель напряжения подаётся 5 В).

    Небольшая разница в подключении NodeMCU и Ардуинки:
    У Ардуино Нано SDA и SCL находятся на выводах А4 и А5 (NodeMCU я подключаю через D1 и D2). Логика у Ардуинки 5 В (у NodeMCU 3,3 В). И касаемо скетча, при заливке в Ардуинку, я убираю строчку: Wire.begin(D1, D2).

    Возможно я не учитываю какую-нибудь особенность при подключении ADS1115 и NodeMCU, но судя по многочисленным роликам и форумам, я вроде бы делаю всё правильно... но... :(
     
    Последнее редактирование: 27 фев 2019
  2. Zvere4ek

    Zvere4ek Нерд

    Весёлый итог: промучился целый день, пробовал другую плату NodeMCU, но всё тоже самое. В итоге даже Ардуинку заглючило и она стала тоже нули показывать. Взял я китайский тестер ещё раз померить напряжение на входе А0 в ADS1115 и вдруг компьютер не выдержал и ребутнулся... ну ок, подумал я и продолжил играть с тестером. Вдруг снова не дозагрузившись ПК опять ушёл в ресет... :))) Виной этому оказался неисправный китайский тестер. Короче, я всё перезагрузил, ещё раз пересобрал схему на макетке, в сотый раз перезалил скетчи и вдруг алилуя! NodeMCU заработала как и должна! Надеюсь, что теперь и дальше будет нормально работать, так как передо мной стоит следующая задача: Скрестить 3 датчика напряжения ZMPT101B + ADS1115 + NodeMCU. И чувствую, что без подводных камней там тоже не обойдётся, хотя напрямую ZMPT101B + NodeMCU отлично работает, но увы, одного аналогового входа мне недостаточно.
     
  3. Как всегда - половина проблем состоит в качестве сборки
     
    Zvere4ek нравится это.
  4. b707

    b707 Гуру

    Zvere4ek - учитывайте важное обстоятельство - на AD1115 нельзя подавать напряжение, превышающее напряжение на пине VCC. Поэтому на NodeMCU максимальное напряжение, которое вы можете измерять - 3.3в, а на Нано - 5в. Может быть в этом и был корень проблем?
    И как следствие - на входы выключенной AD1115(когда VCC = 0v) нельзя подавать измеряемый сигнал, можете пожечь плату
     
    Zvere4ek нравится это.
  5. Zvere4ek

    Zvere4ek Нерд

    Спасибо за советы. Да, я знаю, что у ADS1115 есть такая особенность. Поэтому, в вышеуказанной схеме, я для перестраховки на А0 (в ADS) подавал напряжение через резистивный делитель. Да и питается ADS у меня от выхода 3,3 В с NodeMCU, поэтому сжечь её пока не получилось :) Надеюсь, что она и дальше будет исправно работать :) Глюки были либо из-за макетной платы (хотя я по-разному пробовал переставлять разные провода, но не все, при чём с Ардуинкой всё исправно работало, для чего всего несколько проводков перевтыкалось), либо из-за компьютера. Да ещё и китайский тестер подвёл, из-за которого я несколько раз не мог понять, почему нет напряжения на том или ином контакте. В общем, похоже с вопросом данной темы топика я разобрался. Возможно кому-то поможет схема и мой простейший скетч для тестирования ADS1115.