Метеостанция DHT11+SSD1306+HR911105A

Тема в разделе "Arduino & Shields", создана пользователем Max_Payne, 25 апр 2017.

  1. Max_Payne

    Max_Payne Нуб

    Приветствую, решил запилить датчик температуры в серверную и столкнулся с проблемой: при загрузке скетча в ардуино температура и влажность выводятся на дисплей, сетевуха не работает, убираю строки
    Код (C++):
    Adafruit_SSD1306 display(OLED_RESET);
    и
    Код (C++):
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    и сеть начинает работать, но соответственно не работает вывод информации на дисплей. Прошу помощи в данном вопросе.
    Код (C++):

    #include <SPI.h>
    #include <Wire.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);


    #include "DHT.h"

    #define DHTPIN 2
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);

    #include <EtherCard.h>

    static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
    static byte myip[] = { 192,168,0,12 };
    byte Ethernet::buffer[600];
    BufferFiller bfill;

    int t=0;
    int h=0;

    void setup () {

    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

    if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println( "Failed to access Ethernet controller");
    ether.staticSetup(myip);
    dht.begin();

    }

    static void ReadDHT11()
    {
    h = dht.readHumidity();
    t = dht.readTemperature();
    }

    // Web страница

    static word homePage() {

    bfill = ether.tcpOffset();
    bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html; charset=utf-8\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "<meta http-equiv='refresh' content='10'/>"
    "<title>Серверная</title>"
    "<font size='3em'>Температура: $D C <br /><br />Влажность: $D %</font>"), t, h);
    return bfill.position();
    }


    void loop () {

    int h = dht.readHumidity();
    int t = dht.readTemperature();


    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    display.println("Temp: ");
    display.println(t);
    display.println("Hum: ");
    display.println(h);
    display.display();


    word len = ether.packetReceive();
    word pos = ether.packetLoop(len);

    if (pos) // check if valid tcp data is received
    {
    ReadDHT11();
    ether.httpServerReply(homePage());
    }

    delay(1);

    }
     
  2. dmitron1036

    dmitron1036 Гик

    может пины пересекаются?
     
  3. Max_Payne

    Max_Payne Нуб

    Нет, не пересекаются дисплей сидит на A4 и A5, DHT на D2, hanrun на D13-11 и D8
     
  4. serg_admin

    serg_admin Гик

    Я так понял сеть и дисплей у Вас на SPI шине? тогда пины все таки должны пересекаться. И тогда вероятно дисплей не отпускает SPI.
     
  5. serg_admin

    serg_admin Гик

    Здесь Вы не указываете CS пин то есть подразумевается, что на SPI шине только дисплей
    Попробуйте вызов
    Код (C++):
    Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS);
     
  6. Max_Payne

    Max_Payne Нуб

    Дисплей c i2c интерфейсом.
     
  7. serg_admin

    serg_admin Гик

    А вы проверте выходы SPI после активации дисплея. Возможно библиотека их случайно дергает. Или обновите библиотеку.
     
  8. Max_Payne

    Max_Payne Нуб

    Библиотека последней версии.

    Убрал библиотеку #include <SPI.h> и дисплей заработал совместно с сетевухой, однако проблема с датчиком DHT11 по прежнему актуальна - показывает 0.
     
  9. serg_admin

    serg_admin Гик

    Я думал она после такой экзекуции не скомпилится!

    По DHT11 на мой взгляд два варианта: либо неправильно подключили, либо он не рабочий.
     
  10. Max_Payne

    Max_Payne Нуб

    При выпиливании из кода строчек инициализации дисплея/сетевухи датчик работает и температуру показывает.
     
  11. serg_admin

    serg_admin Гик

    А можно уточнить после выпиливания дисплея или сетевухи?

    Попробуй другой пин, D7 например. Или D2 это как-то принципиально?

    Плата какая? nano?
     
  12. serg_admin

    serg_admin Гик

    Еще можно блокировать прерывание в момент чтения температуры.
     
  13. Max_Payne

    Max_Payne Нуб

    Плата - нано. Либо дисплея, либо сетевухи. Смену порта пробовал уже, результата не дало.
     
    Последнее редактирование: 27 апр 2017
  14. serg_admin

    serg_admin Гик

    Прерывания пробовал блокировать?
     
  15. Max_Payne

    Max_Payne Нуб

    Ещё не пробовал.