Esp-12, gpio

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем yden, 20 ноя 2016.

  1. yden

    yden Гик

    Здравствуйте.
    Ребята, подскажите пожалуйста, не могу разобраться. Модули с али, esp-12e. Как подключить к нему релюшку например? Запутался реально с этими GPIO. Как для релюшки указать в коде вывод? Поделитесь пожалуйста кодом, типа щелкание релюшкой. С нано\уно имел дело, с этими затык.
    И второе, тоже связанное с первым. Подключаю к esp-12e индикатор TM1637 - делаю часы аналогично статье: http://mysku.ru/blog/aliexpress/33970.html
    Питание для индикатора беру с VCC (индикатор 5в), esp питаю от usb. На индикаторе горит диод питания. Выводы подключаю как в статье. Но не работают часы (нет циферок), хотя монитор показывает что esp взял значение времени с ntp.
    Код из статьи:
    Код (C++):
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    #include "TM1637.h"
    #define TM1637_CLK  4
    #define TM1637_DIO  5

    TM1637 tm1637(TM1637_CLK,TM1637_DIO);

    #define AP_SSID                  "m12"
    #define AP_PASS                  "89086401772"

    #define TIMEZONE 8

    char ssid[] = "m12";  //  your network SSID (name)
    char pass[] = "89086401772";       // your network password


    unsigned int  localPort = 2390;      // local port to listen for UDP packets
    unsigned long ntp_time = 0;
    long  t_correct        = 0;
    unsigned long cur_ms   = 0;
    unsigned long ms1      = 0;
    unsigned long ms2      = 10000000UL;
    unsigned long t_cur    = 0;
    bool          points   = true;
    unsigned int err_count = 0;


    IPAddress timeServerIP;
    const char* ntpServerName = "time.nist.gov";

    const int NTP_PACKET_SIZE = 48;
    byte packetBuffer[ NTP_PACKET_SIZE];
    WiFiUDP udp;

    void setup()
    {
       Serial.begin(115200);
       Serial.println("");
       Serial.println("");
       Serial.print("Free Memory: ");
    // Соединение с WiFi  
       Serial.println(ESP.getFreeHeap());
       if( !ConnectWiFi(AP_SSID,AP_PASS) ){
           Serial.println("Reset ESP8266 ...");
           ESP.reset();
       }
       delay(1000);
    // Инициализация дисплея
      tm1637.init();
    // Установка яркости дисплея
      tm1637.set(7);
     
    // Инициализауия UDP соединения с NTP сервером
       Serial.println("Starting UDP");
       udp.begin(localPort);
       Serial.print("Local port: ");
       Serial.println(udp.localPort());
    }

    void loop(){
       cur_ms       = millis();
       t_cur        = cur_ms/1000;
    // Каждые 60 секунд считываем время в интернете
       if( cur_ms < ms2 || (cur_ms - ms2) > 3600000 ){
           err_count++;
    // Делаем три  попытки синхронизации с интернетом
           if( GetNTP() ){
              ms2       = cur_ms;
              err_count = 0;
              t_correct = ntp_time - t_cur;
           }
       }
     
    // Каждые 0.5 секунды выдаем время
       if( cur_ms < ms1 || (cur_ms - ms1) > 500 ){
           ms1 = cur_ms;
           ntp_time    = t_cur + t_correct;
           DisplayTime();
           points = !points;
       }

    // Если нет соединения с интернетом, перезагружаемся
       if( err_count > 10 ){
           Serial.println("NTP connect false");
           Serial.println("Reset ESP8266 ...");
           ESP.reset();
       
       }
       delay(100);
    }

    /**
    * Соединение с WiFi
    */

    bool ConnectWiFi(const char *ssid, const char *pass) {
    // Три попытки соединения по WiFi
       for( int i=0; i<3; i++){
          Serial.print("\nConnecting to: ");
          Serial.println(ssid);
          WiFi.begin(ssid,pass);
          delay(1000);
    // Максиммум 12 раз проверка соединения      
          for( int j=0; j<12; j++ ){
              if (WiFi.status() == WL_CONNECTED) {
                  Serial.print("\nWiFi connect true: ");
                  Serial.print(WiFi.localIP());
                  Serial.print("/");
                  Serial.print(WiFi.subnetMask());
                  Serial.print("/");
                  Serial.println(WiFi.gatewayIP());
                  return true;
              }
              delay(1000);
              Serial.print(WiFi.status());
          }
       }  
       Serial.println("\nConnect WiFi failed ...");
       return false;
    }

    /**
    * Выдача текущего времени на индикатор
    */

    void DisplayTime(void){
       uint16_t m = ( ntp_time/60 )%60;
       uint16_t h = ( ntp_time/3600 )%24;
       Serial.print("Time: ");
       Serial.print(h);
       Serial.print(":");
       Serial.println(m);
       tm1637.point(points);
       tm1637.display(0,h/10);
       tm1637.display(1,h%10);
       tm1637.display(2,m/10);
       tm1637.display(3,m%10);
       
    }


    /**
    * Посылаем и парсим запрос к NTP серверу
    */

    bool GetNTP(void) {
      WiFi.hostByName(ntpServerName, timeServerIP);
      sendNTPpacket(timeServerIP);
      delay(1000);
     
      int cb = udp.parsePacket();
      if (!cb) {
        Serial.println("No packet yet");
        return false;
      }
      else {
        Serial.print("packet received, length=");
        Serial.println(cb);
    // Читаем пакет в буфер  
        udp.read(packetBuffer, NTP_PACKET_SIZE);
    // 4 байта начиная с 40-го сождержат таймстамп времени - число секунд
    // от 01.01.1900  
        unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
        unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);
    // Конвертируем два слова в переменную long
        unsigned long secsSince1900 = highWord << 16 | lowWord;
    // Конвертируем в UNIX-таймстамп (число секунд от 01.01.1970
        const unsigned long seventyYears = 2208988800UL;
        unsigned long epoch = secsSince1900 - seventyYears;
    // Делаем поправку на местную тайм-зону
        ntp_time = epoch + TIMEZONE*3600;  
        Serial.print("Unix time = ");
        Serial.println(ntp_time);
      }
      return true;
    }

    /**
    * Посылаем запрос NTP серверу на заданный адрес
    */

    unsigned long sendNTPpacket(IPAddress& address)
    {
      Serial.println("sending NTP packet...");
    // Очистка буфера в 0
      memset(packetBuffer, 0, NTP_PACKET_SIZE);
    // Формируем строку зыпроса NTP сервера
      packetBuffer[0] = 0b11100011;   // LI, Version, Mode
      packetBuffer[1] = 0;     // Stratum, or type of clock
      packetBuffer[2] = 6;     // Polling Interval
      packetBuffer[3] = 0xEC;  // Peer Clock Precision
      // 8 bytes of zero for Root Delay & Root Dispersion
      packetBuffer[12]  = 49;
      packetBuffer[13]  = 0x4E;
      packetBuffer[14]  = 49;
      packetBuffer[15]  = 52;
    // Посылаем запрос на NTP сервер (123 порт)
      udp.beginPacket(address, 123);
      udp.write(packetBuffer, NTP_PACKET_SIZE);
      udp.endPacket();
    }
    спасибо
     
  2. yden

    yden Гик

    С релюшкой с горем пополам разобрался.
     
  3. alp69

    alp69 Форумчанин

    Читайте таблицу соответствия. В код вставляется индекс gpio. Соответствие пина номеру gpio зависит от модели esp.