Как запустить скетч NodeMCU из Arduino Leonardo Micro Pro?

Наверное, это очень простой вопрос. Мой NodeMCU настроен и работает там, где он подключается к Wi-Fi и отправляет push-уведомление. В настоящее время он делает это автоматически при подключении к источнику питания.

Я хочу подключить его к моему Leonardo Micro, чтобы в какой-то части скетча Leonardo он отправлял сигнал NodeMCU для запуска скетча для запуска push-уведомления. Итак, какие порты мне следует подключить и какой код изменить.

Вот мой рабочий код NodeMCU.

    #include <ESP8266WiFi.h>

// Настройки Wi-Fi
const char* ssid = "MySSID";
const char* password = "MyPassword";
// Настройки пушовера
char pushoversite[] = "api.pushover.net";
char apitoken[] = "MyAPIToken";
char userkey [] = "MyUserKey";
int length;
WiFiClient client;
void setup() {
  Serial.begin(9600);
  delay(10);

  // Подключаемся к сети Wi-Fi
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Распечатываем IP-адрес
  Serial.print(WiFi.localIP());

}

void loop()
{
 pushover("OMG, Yes it works!!!");  
 delay(60000); 
}

byte pushover(char *pushovermessage)
{
 String message = pushovermessage;

 length = 81 + message.length();

if(client.connect(pushoversite,80))
 {
   client.println("POST /1/messages.json HTTP/1.1");
   client.println("Host: api.pushover.net");
   client.println("Connection: close\r\nContent-Type: application/x-www-form-urlencoded");
   client.print("Content-Length: ");
   client.print(length);
   client.println("\r\n");;
   client.print("token=");
   client.print(apitoken);
   client.print("&user=");
   client.print(userkey);
   client.print("&message=");
   client.print(message);
   while(client.connected())  
   {
     while(client.available())
     {
       char ch = client.read();
       Serial.write(ch);
     }
   }
   client.stop();
 }  
}

И мой код Леонардо

#include <Keyboard.h>
#include <Mouse.h>
char returnKey = KEY_RETURN;
char tabKey = KEY_TAB;
void setup() {
  Keyboard.begin();
  Mouse.begin();

  delay(4000); //Задержка тестирования
// Экран выбора языка
  Keyboard.write(returnKey);
  delay(30000);
// Экран приветствия
  Mouse.click(MOUSE_LEFT);
  delay(100);
  Keyboard.write(tabKey);
  delay(100);
  Keyboard.write(tabKey);
  delay(100);
  Keyboard.write(' ');
  delay(2000);
// Выбор клавиатуры
  Keyboard.write(tabKey);
  delay(100);
  Keyboard.write(tabKey);
  delay(100);
  Keyboard.write(tabKey);
  delay(100);
  Keyboard.write(' ');
  delay(2000);
  TELL NODEMCU TO SEND PUSH NOTIFICATION HERE
}

void loop() {
}

Напоминаю, что распиновка на моих платах следующая.

Леонардо:

Макет Леонардо

NodeMCU:

Макет NodeMCU

, 👍1

Обсуждение

Сначала заставьте его работать с кнопки. Затем замените кнопку на Леонардо., @Majenko


1 ответ


Лучший ответ:

2

Аппаратная часть:

Это как кнопка: просто подключите микроконтакт arduino к контакту nodeMCU, а GND Arduino к GND nodeMCU.

Также рекомендуется использовать два резистора в качестве делителя напряжения, поскольку Arduino Micro работает с напряжением 5 В, а ESP8266 (nodeMCU) — с напряжением 3 В. 5 В может вывести из строя ESP8266, но это пока не совсем ясно. Резисторный делитель подключаем как в этой ссылке ссылка на резисторный делитель для uart но вместо TX поставил arduino micro и вместо RX nodeMCU. Схема резисторного делителя


Часть кода:

В микрочасти Arduino используйте:

  • В void setup(): pinMode(PIN, OUTPUT);

  • В отмеченном вами месте:

digitalWrite(PIN, HIGH);
delay(100);   //короткое время ожидания
digitalWrite(PIN, LOW);

Часть nodeMCU:

  • В void setup(): pinMode(PIN, INPUT);

  • Удалите все из voidloop() и поместите туда это:

if(digitalRead(PIN) == 1) pushover("OMG, Yes it works!!!");

В обоих кодах выберите PIN по вашему выбору.

,

Спасибо, Матей, это именно то, что я искал, и, думаю, теперь я тоже начинаю во всем разбираться. Мне все еще нужно прочитать о сопротивлениях. Я купил щиток для перезаряжаемой батареи, который собирался использовать для питания мини-устройства и NodeMCU, но думаю, даже если он будет питаться таким образом, мне все равно понадобится резистор между цифровыми выводами?, @Danny Shepherd

@DannyShepherd Резистор - простая вещь, он вызывает падение напряжения, которое вы можете рассчитать по закону Ома (U = R*I). В данном случае это не так просто, потому что мы работаем с выводами микросхемы, ток потребления которых очень мал – всего несколько микроампер., @Matej

@DannyShepherd Если мы хотим подключить логику 5 В к логике 3 В 3, нам нужно, чтобы падение напряжения на первом резисторе составляло 1,7 В (5–3,3), это означает, что на втором резисторе падение напряжения будет 3 В 3 (между выводом nodeMCU и GND). Но зачем два резистора? Потому что, если вы используете только один, ток настолько мал, что значение резистора будет настолько большим, что падение напряжения будет равно 1,7 В. Итак, мы просто подключим два резистора последовательно, и они смогут создать правильный ток. Мы можем применить формулу «U1/U2 = R1/R2», которая получена на основе закона Ома, а затем уменьшить ток по ней, потому что при последовательном соединении ток одинаков., @Matej

@DannyShepherd Итак, если оба Arduino будут иметь одинаковый уровень напряжения, вам не нужно использовать делитель напряжения или переключатель уровня. Также некоторые микроконтроллеры устойчивы к 5 В, но особенно ESP8266 - нет, или это еще не ясно. Так это ответ на ваш вопрос? :), @Matej

Привет @Matej, это действительно хорошо объяснено, спасибо. Только что взял в руки резистов, так что поиграюсь с этим и, надеюсь, не поджарю доски! Просто чтобы кое-что проверить, если у меня есть щит, который питает Leonardo напряжением 5 В, а NodeMCU напряжением 3,3 В - цифровая распиновка Arduino все равно будет пытаться подавать напряжение 5 В вниз (и, следовательно, потребуется резистор). Я так полагаю, просто проверка основ течения тока. Спасибо!, @Danny Shepherd

@DannyShepherd Да, если Леонардо питается от напряжения 5 В, вам все равно понадобится делитель напряжения из двух резисторов., @Matej

здесь немного не по теме, но я просто проверяю свой перезаряжаемый щит, который хочу использовать для питания, и на выходе у него было только 5 В. Итак, я предполагаю, что могу подключить его напрямую к порту Pro Micro VCC, а затем я смогу подключить тот же выход к NodeMCU, но использовать резисторы, чтобы сделать его правильным 3,3 В?, @Danny Shepherd

@DannyShepherd Да, но помните, чтобы не включать ESP8266 с напряжением 5 В, вам нужно использовать стабилизатор, который встроен в такие платы, как nodeMCU. Я думаю, что на nodeMCU вы можете подать 5 В на вывод VIN. И да, для преобразования логического уровня 5В в 3В3 используйте резисторный делитель напряжения., @Matej

ах, я этого не знал, ок, тогда жизнь становится немного проще. Так что просто дважды проверьте, как это сделать, например. Вывод 5 на Pro Micro к выводу 5 на nodeMCU с резистором 10 кОм лучше и заземлением на каждой плате, соединенным вместе с резистором 20 кОм между ними?, @Danny Shepherd

@DannyShepherd Я не знаю, имеете ли вы это в виду, но GND будет напрямую подключен к GND, а между цифровыми выводами у вас будет один резистор и второй между nodeMCU и GND., @Matej

Привет, Матей, у меня все заработало, одно изменение, которое мне нужно было внести в код, заключалось в том, чтобы у MCU был pinMode (PIN, INPUT); вместо ВЫХОД. (О, и в конце концов я использовал плату переключения логического уровня, чтобы напряжение от 5 В до 3,3 В было немного безопаснее), @Danny Shepherd

@DannyShepherd Эй, отлично! Вы правы, я ошибся в ответе. Отредактировано., @Matej