Arduino Remote

Создавая проекты на платформе ардуино, часто сталкивался с необходимостью приобретать различные кнопки, выключатели, потенциометры, дисплеи и прочие элементы. Кроме покупки их нужно было ещё запаивать, что занимало время и пины контроллера.

Неожиданно пришла идея полностью убрать все эти элементы из моих проектов при помощи приложения на телефоне. Заморочился и создал приложение. Было ясно, что создать конкретный пульт будет бесполезно, так как проекты разные и пульты нужны разные. Поэтому в приложении присутствует конструктор, при помощи которого можно создать любой пульт за считанные минуты. Приложение имеет две возможности связи с контроллером - по Bluetooth или WiFi.

Думаю, такая вещь может пригодиться любому, кто разрабатывает проекты.
Установочный АПК файл для андроид 8+ и PDF с подробными объяснениями кода и приложения закинул себе на гугл диск. Ниже ссылка на папку с файлами. Буду рад конструктивным комментариям и предложениям по данному проекту.

https://drive.google.com/drive/folders/1KsZZMWJiBXBHWM7frK42_CDhIAiO_Xps?usp=sharing

Пример использования
создайте пульт и добавьте в следующем порядке элементы управления

  1. Switch
  2. Button
  3. Textfield
  4. Potentiometer min = 1 max = 3
  5. Potentiometer min = 0 max = 500

Скетч для WiFi (Wemos)

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
const char* ssid = "Wemos HotSpot";
const char* password = "12345678";
String sendValue = "";
WiFiServer server(80); // Create a server on port 80
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  WiFi.softAP(ssid, password);
  Serial.println();
  Serial.println("IP address: ");
  Serial.println(WiFi.softAPIP());
  server.begin(); // Start the server
}
void loop() {
  WiFiClient client = server.available(); // Listen for incoming clients
  client.setTimeout(100);
  if(client){
    String data = client.readStringUntil('\n'); // Read the data from the client
    data.trim();
  if(data != ""){
    Serial.println(data);
  }
  // Switch
  if(data == "s0x1") {
    digitalWrite(LED_BUILTIN, LOW); // LED on
  } else if (data == "s0x0"){
    digitalWrite(LED_BUILTIN, HIGH); // LED off
  }
  // Button
  if (data == "b1x1") {
  sendValue = "Hello";
  } else if (data == "b1x0") {
  sendValue = "Bye bye";
  }
  //Potentiometer 1 - 3
  char *p;
  char buffer[128];
  String potentiometerParts[2];
  String potentiometer = data;
  potentiometer.toCharArray(buffer, sizeof(buffer));
  int i = 0;
  p = strtok(buffer, "x");
  while(p && i < 2){
    potentiometerParts[i] = p;
    p = strtok(NULL, "x");
    ++i;
  }
  if(potentiometerParts[0] == "p3"){
    int potentiometerValue = potentiometerParts[1].toInt();
    if(potentiometerValue == 1){
    sendValue = "Going slow";
    } else if(potentiometerValue == 2){
    sendValue = "Going faster";
    } else if(potentiometerValue == 3){
    sendValue = "Going fast";
    }
  }
  // potentiometer 0 - 500
  potentiometer = data;
  potentiometer.toCharArray(buffer, sizeof(buffer));
  i = 0;
  p = strtok(buffer, "x");
  while(p && i < 2){
  potentiometerParts[i] = p;
  p = strtok(NULL, "x");
  ++i;
  }
  if(potentiometerParts[0] == "p4"){
    String potentiometerValue = potentiometerParts[1];
    sendValue = "Value: " + potentiometerValue;
  }
  // send data to textfield
  client.print(sendValue);
  }
}

Скетч для Bluetooth (ESP-WROOM-32):

#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
String data = "";
void setup() {
  pinMode(2, OUTPUT); // Builtin LED
  Serial.begin(115200);
  // Bluetooth device name
  SerialBT.begin("ESP32"); // you can enter any name you want
  Serial.println("Bluetooth started");
}
void loop() {
  data = "";
  // Read received messages (LED control command)
  if(SerialBT.available()){
    delay(1); // pause the controller for reading the incoming data correctly
    while(SerialBT.available()){
      char incomingChar = SerialBT.read();
      if (incomingChar != '\n'){
      data += String(incomingChar);
      }
    }
  }
  if(data == "s0x1") {
    digitalWrite(2, HIGH); // LED on
  } else if (data == "s0x0"){
    digitalWrite(2, LOW); // LED off
  }
  if (data == "b1x1") {
  bluetoothPrintLine("Hello*");
  } else if (data == "b1x0") {
  bluetoothPrintLine("Bye bye*");
  }
  char *p;
  char buffer[128];
  String potentiometerParts[2];
  String potentiometer = data;
  potentiometer.toCharArray(buffer, sizeof(buffer));
  int i = 0;
  p = strtok(buffer, "x");
  while(p && i < 2){
    potentiometerParts[i] = p;
    p = strtok(NULL, "x");
    ++i;
  }
  if(potentiometerParts[0] == "p3"){
    int potentiometerValue = potentiometerParts[1].toInt();
    if(potentiometerValue == 1){
      bluetoothPrintLine("Going slow*");
    } else if(potentiometerValue == 2){
      bluetoothPrintLine("Going faster*");
    } else if(potentiometerValue == 3){
      bluetoothPrintLine("Going fast*");
   }
  }
  potentiometer = data;
  potentiometer.toCharArray(buffer, sizeof(buffer));
  i = 0;
  p = strtok(buffer, "x");
  while(p && i < 2){
    potentiometerParts[i] = p;
    p = strtok(NULL, "x");
    ++i;
  }
  if(potentiometerParts[0] == "p4"){
    String potentiometerValue = potentiometerParts[1];
    bluetoothPrintLine("Value: " + potentiometerValue + "*");
  }
}
void bluetoothPrintLine(String line) {
  unsigned l = line.length();
  for (int i = 0; i < l; i++) {
    if (line[i] != '\0')
      SerialBT.write(byte(line[i]));
  }
}

В правилах данного раздела сказано:

Публикация скетча обязательна

Предлагаю либо дополнить тему, либо снести.

Нужен не ВФ/БТ, а глобальный онлайн. Он есть?

В смысле через интернет? Нет, прочтите что это и для чего. Связь по интернету здесь не нужна.

@Mftof , объясните, чем этот проект отличается от расположенного в соседней ветке?

В проекте от MoDyz МК управляет андроидом, в моём проекте андроид управляет МК. Есть ещё возможность вывести сообщение от МК в тесктовое поле.

ТС видимо писатель, читать не умеет.

не та уже Пятница, не та )))

Кстати , у Гайвера тоже подобная штука есть GuyverHub вроде

Отвечаю всем кто пишет “А тут я видел подобное”, я тоже видел подобное, скачивал, пробовал и оно мне не нравилось. Решил сделать так как я это вижу и считаю удобным. Если кто решит потестить, ожидаю мнение этого человека.

Не интересно

Тестить это не интересно и даже лень, поскольку есть решения для работы через интернет. Все то же самое, только не нужно находиться рядом и МК. Все эти “пульты” - блажь. Имхо. А чувство прекрасного у каждого свое (вкусовщина называется). Тоже ИМХО
Для ближнего поля есть ИК и БТ универсальные пульты. Несколько штук валяется без дела. Покупал на алике в самом начале “карьеры”. Тогда это казалось полезным приобретением

В ветке “Проекты” положено размещать код. В данном (и смежном) проектах, код это проект на Джаве для Андроид Студии. (Для извращенцев - на Эклипсе)

  1. Если не будет кода, или ссылки на публичный гитхаб с кодом на Джаве, я перенесу это в ЧЧ и буде просить Алехандро о сносе темы, как рекламы.
    Пусть даже я единственный Java программер на форуме, а мне детские поделки неинтересны, но публикация кода на открытом форуме - вопрос ПРИНЦИПА.
  2. ТС! Я прошу не обижаться на меня. Я - очень давний и “упертый” сторонник Опен Соурс. Отсутствие кода в Проекте наводит меня на предположение о том, что ты считаешь свой код - великой “жемчужиной”. Если я ошибся - синхронизируй в Андроид Студии свой проект с ГитХабом и опубликуй тут ссылку на него. Можно так: если стесняешься - сделай репозиторий приватным, но каждому отметившемуся в теме - открывай, по его просьбе.

Удаляйте тему.

А почему вы не хотите расширить границы проекта, вы же сами просили обратной связи? Ну и свои административные правила есть даже в патентном бюро)) Идея ваша лично мне кажется интересной, хоть я и не являюсь владельцем устройств на ОС Андроид. Но заявленые на текущий момент возможности лично мне не интересны по ряду причин

В целом тема интересная. Я перепробовал 4 варианта: наборы реальных кнопок, потенциометров, переключателей; пульт ик; смартфон+приложение=пульт; кнопка-экран. Всё по своему интересно.

На форуме уже был вопрос о управлении МК через интернет, я помог этому человеку. Кроме того в интернете есть много готовых решений. Тот же Гайвер это сделал. В разделе проектов есть мой проект “Зарядное для никель-металлгидридных аккумуляторов”, например это зарядное можно было бы управлять созданным пультом и не покупать LCD монитор.
Пульт он для устройств поблизости, например детская машинка и т.п., там интернет не нужен. Нужен простой и удобный пульт в руках, за безплатно.

и ещё надёжный…тема в принципе интересна тем, что позволяет добавлять виртуальные кнопки, в проекте на ESP32C3 пришлось изголяться с логикой имея всего две кнопки

Web по какой то причине не катит?)) Вроде в тэгах ESP

Код для Андроида полное го*но. Не хочу его показывать. Было написано быстро и только чтоб работало без сбоев. В гитхабе не шарю, поэтому залил на диск. Я посмотрю как сделать репозитори и как его сделать приватным и обновлю тему.