• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Не работает двигатель на nodemcu v3

dr. Arntholcz

New member
Здравствуйте.

Вводные данные.
Есть Wemos d1 r1. На сколько я знаю там esp8266. Есть два драйвера двигателей mx1508. Один драйвер управляет 2 двигателями, второй одним. Ичпользуются gpio 4,5 для одного и gpio 14, 12 для другого драйвера соответственно. И на wemos d1 r1 все прекрасно работает.
Решил сэкономить место и перейти на nodemcu v3 (где тот же esp8266 или я ошибаюсь?).

Вопрос.
Тот драйвер, который подключен к gpio 4 и 5 крутит двигателями в обе стороны.
А второй, к каким бы gpio я его не подключал, крутит только в одну сторону.
Почему? Как его заставить корректно работать?
Может nodemcu глючные? Покупал их одним заказом на озоне.
Тыкните носом меня, где я допустил ошибку.
Может есть смысл перейти вообще на другой мк (esp32, например)?
 

CodeNameHawk

Moderator
Команда форума
Если работает на Wemos, то может работать и на nodemcu v3.
Просто разберитесь к каким выводам подключить.
Проще всего это сделать ориентируясь по номерам выводов GPIOx,
на разных модулях они могут быть под другими номерами Dx
А так фото в студию, как все собрано.
 

CodeNameHawk

Moderator
Команда форума
Тот драйвер, который подключен к gpio 4 и 5 крутит двигателями в обе стороны.
А второй, к каким бы gpio я его не подключал, крутит только в одну сторону.
Ну так просится подключить на эти выводы и проверить.
 

dr. Arntholcz

New member
Если работает на Wemos, то может работать и на nodemcu v3.
Просто разберитесь к каким выводам подключить.
Проще всего это сделать ориентируясь по номерам выводов GPIOx,
на разных модулях они могут быть под другими номерами Dx
А так фото в студию, как все собрано.
Код:
#include <WebSockets2_Generic.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>

using namespace websockets2_generic;
int led_state, moved, turn, brake = 0;

void onMessageCallback(WebsocketsMessage message)
{
  Serial.print("Got Message: ");
  Serial.println(message.data());

 
      StaticJsonDocument<200> doc;              // create a JSON container
      deserializeJson(doc, message.data());
      led_state = doc["led_state"];
      moved = doc["moved"];
      turn = doc["turn"];
      brake = doc["brake"];
      
      if(led_state==1){digitalWrite(16, !digitalRead(16));};

      if(moved>0){
        analogWrite(4, moved+brake);
        analogWrite(5, 0+brake);
        };
      if(moved<0){
        analogWrite(4, 0+brake);
        analogWrite(5, moved*-1+brake);
        };
      if(moved==0){
        analogWrite(4, 0+brake);
        analogWrite(5, 0+brake);
        };

////////////////////////////////////////////////////////////////////////////////////
      
      if(turn>0){
        analogWrite(12, 1023);
        analogWrite(14, 0);
        };
      if(turn<0){
        analogWrite(12, 0);
        analogWrite(14, 1023);
        };
      if(turn==0){
        analogWrite(12, 0);
        analogWrite(14, 0);
        };


}

void onEventsCallback(WebsocketsEvent event, String data)
{
  (void) data;
    

  if (event == WebsocketsEvent::ConnectionOpened)
  {
    Serial.println("Connnection Opened");
  }
  else if (event == WebsocketsEvent::ConnectionClosed)
  {
    Serial.println("Connnection Closed");
  }
  else if (event == WebsocketsEvent::GotPing)
  {
    Serial.println("Got a Ping!");
  }
  else if (event == WebsocketsEvent::GotPong)
  {
    Serial.println("Got a Pong!");
  }
}

WebsocketsClient client;

void setup()
{
 
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(14, OUTPUT);
  pinMode(16, OUTPUT);
  digitalWrite(4, 0);
  digitalWrite(5, 0);
  digitalWrite(12, 0);
  digitalWrite(14, 0);
  digitalWrite(16, 0);
  Serial.begin(115200);
  while (!Serial && millis() < 5000);

  Serial.print("\nStart InSecured-ESP8266-Client on "); Serial.println(ARDUINO_BOARD);
  Serial.println(WEBSOCKETS2_GENERIC_VERSION);
 
  // Connect to wifi
  WiFi.begin("Redmi Note 12S", "");

  // Wait some time to connect to wifi
  for (int i = 0; i < 10 && WiFi.status() != WL_CONNECTED; i++)
  {
    Serial.print(".");
    delay(1000);
  }

  // Check if connected to wifi
  if (WiFi.status() != WL_CONNECTED)
  {
    Serial.println("No Wifi!");
    return;
  }

  Serial.print("Connected to Wifi, Connecting to WebSockets Server @");
//  Serial.println(websockets_connection_string);

  // run callback when messages are received
  client.onMessage(onMessageCallback);

  // run callback when events are occuring
  client.onEvent(onEventsCallback);

#if USING_INSECURE_MODE
  client.setInsecure();
#else
  // Before connecting, set the ssl fingerprint of the server
  client.setFingerprint("2D 29...02");
#endif

  // Connect to server
  bool connected = client.connect("wss://my-domen.ru:8031");

  Serial.println("Called Connect to server.");

  if (connected)
  {
    Serial.println("Connected!");

//    String WS_msg = String("Hello to Server from ") + BOARD_NAME;
    client.send("Connected ёпта");

    // Send a ping
    client.ping();
  }
  else
  {
    Serial.println("Not Connected!");
  }
}

void loop()
{
  client.poll();
}
photo_2024-11-24_09-34-30.jpgphoto_2024-11-24_09-45-07.jpg
 

dr. Arntholcz

New member
И что я вам могу сказать?
Переход на wemos mini решил мою проблему. Оба двигателя работают как надо.
 

CodeNameHawk

Moderator
Команда форума
Если судить по фото, то на node не подключена земля ни к одному из модулей, на вемос одна подключена.
 
Была похожая проблема. Пришлось проверять пины, оказалось, что на нескольких платах в последовательности пинов 12, 13, 14. и т.д. не все работают. Платы китайские!
 
Сверху Снизу