Модуль ESP8266 блокирует Arduino M0

Тема в разделе "Arduino & Shields", создана пользователем teddyfox, 2 окт 2016.

Метки:
  1. teddyfox

    teddyfox Нерд

    Добрый день,
    Нужна помощь. Начал работать с WiFi модулем ESP8266 (ESP-001) на Arduino M0 (Arduino IDE 1.7.10 от arduino.org под Mac OS X 10.9.5 Mawericks на MacBook Pro Retina mid-2013). Использую ESP8266 библиотеку WeeESP8266 от ITEAD ( http://docs.iteadstudio.com/ITEADLIB_Ar ... index.html ).
    ESP8266 модуль соединен с M0 вот так:
    ESP8266_TX->RX(0)
    ESP8266_RX->TX(1)
    ESP8266_CH_PD->3.3V
    ESP8266_VCC->3.3V
    ESP8266_GND->GND

    М0 общается с IDE по порту /dev/tty.usbmodem1421. Попробовал загрузить скетч из примеров библиотеки "UDPClientSingle".
    Код (C++):
    // example UDPClientSingle.ino - demo of library WeeESP8266.
    #include "ESP8266.h"

    #define SSID              "my_net"
    #define PASSWORD       "123456"
    #define HOST_NAME     "192.168.1.255"
    #define HOST_PORT      (5416)
    ESP8266 wifi(Serial,9600);
     
    void setup()
    {   delay(5000);      // to free-up SerialUSB after sketch loading
       SerialUSB.print("setup begin\r\n");
           SerialUSB.print("FW Version:");
           SerialUSB.println(wifi.getVersion().c_str());
         
           if (wifi.setOprToStationSoftAP()) { SerialUSB.print("to station + softap ok\r\n"); }
       else { SerialUSB.print("to station + softap err\r\n"); }
     
           if (wifi.joinAP(SSID, PASSWORD))
          {   SerialUSB.print("Join AP success\r\n");
             SerialUSB.print("IP: ");
             SerialUSB.println(wifi.getLocalIP().c_str()); }
       else    {   SerialUSB.print("Join AP failure\r\n"); }
       
          if (wifi.disableMUX()) { SerialUSB.print("single ok\r\n"); }
       else { SerialUSB.print("single err\r\n"); }
       
       SerialUSB.print("setup end\r\n");
    }
     
    void loop()
    {   uint8_t buffer[128] = {0};
       
       if (wifi.registerUDP(HOST_NAME, HOST_PORT))
       { SerialUSB.print("register udp ok\r\n"); }
       else { SerialUSB.print("register udp err\r\n"); }
       
       char *hello = "Hello, this is client!";
       wifi.send((const uint8_t*)hello, strlen(hello));
       
       uint32_t len = wifi.recv(buffer, sizeof(buffer), 10000);
       if (len > 0)
          { SerialUSB.print("Received:[");
          for(uint32_t i = 0; i < len; i++) { SerialUSB.print((char)buffer[i]); }
          SerialUSB.print("]\r\n"); }
       
       if (wifi.unregisterUDP()) { SerialUSB.print("unregister udp ok\r\n"); }
       else { SerialUSB.print("unregister udp err\r\n"); }

       delay(5000);
    }
     
    Вот что происходит. ESP8266+M0 подключены к IDE. IDE компилирует и загружает скетч. Но как только пытаюсь открыть Монитор последовательного порта, IDE сообщает "Board at /dev/tty.usbmodem1421 is not available". И после этого подключение M0 уже не распознается системой (и IDE). М0 заблокирована. Снять блокировку удается только с помощью "Rescue guide for microcontroller ATSAMD21G18A" ( http://www.arduino.org/learning/tut...rescue-guide-for-microcontroller-atsamd21g18a). Если коротко, то это загрузка стандартного тестового скетча Blink и нажатие во время загрузки RESETa на M0. M0 оживает. Повторял эти попытки с ESP8266 несколько раз с тем же результатом.

    Что не так? Что делать?
    Спасибо.
     
  2. ИгорьК

    ИгорьК Оракул Модератор

    Не вникая в Ваш код и в то что есть эта плата, замечу вот что.
    ESP-8266 работает по UART. Если программирование платы осуществляется тоже по UART и именно тот, на котором сидит ESP-8266 - ничего не получится. Чтобы запрограммировать плату - нужно отсоединить модуль.
    Если же программа должна общаться с компьютером во время работы и там же находится ESP-8266 - ничего не получится в принципе. И решить эту проблему без присоединения модуля к другим ногам - не возможно.
    Для присоединения к другим ногам, скорее всего, нужна библиотека SoftwareSerial.
     
  3. teddyfox

    teddyfox Нерд

    ИгорьК, спасибо за ответ.
    На Arduino M0 есть аппаратный UART Serial (ноги 0 и 1) - по нему М0 общается с ESP8266, и есть виртуальный serial-port SerialUSB (идет напрямую в процессор ATSAMD21G18) для общения с компом. Они физически разные. Так что тут я проблемы не вижу.