DevGang
Авторизоваться

Дистанционное управление Arduino

Предположим, я хочу создать Arduino Hubs с исполнительными механизмами и датчиками, но управлять ими нужно дистанционно.

Каково же решение?

Я создал библиотеку Arduino, которая может выполнять следующие действия:

  1. Для каждого исполнительного механизма/датчика назначаются выводы, имена и некоторые параметры.
  2. Каждый элемент назначается на центральный командный узел (CentralCommandUnit, CCU), который будет управлять всем процессом с этого момента

Каковы слабые места?

  1. Это решение находится на ранней стадии, и иногда я вижу проблему, которую необходимо устранить с помощью разрывных изменений
  2. В настоящее время работает только для значений типа bool и int

Предполагаемая публика

Пожалуйста, имейте в виду, что приведенный здесь код, даже для кода "мигания", более многословен, чем в проекте для начинающих. Поэтому это не для тех, кто только начинает работать с Arduino. Вы не увидите pinMode, analogRead... потому что этим занимается библиотека.

Давайте приступим!

Библиотека

В IDE Arduino установите Simple Repository IO

Некоторые элементы конструкции

Предмет Количество
Arduino 1
Фоторезистор 1
Макетная плата 1
Резистор 220 Ом 1
Светодиод (встроенный) 1

Вывод A0 подключен к резистору и фоторезистору

Вторая ножка резистора подключена к разъему GND

Последняя ножка фоторезистора подключена к напряжению 5 В

Давайте воспользуемся встроенным светодиодом!

Код

// imports
#include "bool_component.h"
#include "ccu.h"
#include "command_factory.h"
#include "percent_component.h"
#include "Simple_Repository_IO.h"

// for this library, we must know only the names
const String led = "led";
const String photoSensor = "photo";
// this one is responsible to execute commands
CentralCommandUnit ccu;

void setup()
{
  // creating a new Repository with 2 items
  Repository *hub = new Repository("hub", 2);

  // LED_BUILTIN >> your IDE knows the builtin led for your Arduino board
  // BoolComponent >> this led will turn on or off. This seems to be a boolean for me :)
  // Component::IoType::OUT >> we are not reading values, we're showing them
  BoolComponent *bc = new BoolComponent(LED_BUILTIN, led, Component::IoType::OUT);
  // A0 >> analogic input pin
  // PercentComponent >> the value starts at 0 (zero - pitch dark) and goes to 100 ("praise the sun")
  // Component::IoType::IN >> we are reading values
  PercentComponent *pc = new PercentComponent(A0, photoSensor, Component::IoType::IN);

  // adding to the repository
  hub->put(0, bc);
  hub->put(1, pc);
  // starting the Central Command Unit
  ccu.setup(hub);

  Serial.begin(9600);

  // ccu.execute >> tells the ccu to do some command
  // CommandFactory::describe() >> this is to create a JSON from your Arduino hub stored into the repository
  String result = ccu.execute(CommandFactory::describe());
  Serial.println(result);
}

// Please, don't use this library as the example bellow
// This is an example to it running. In the next article, we'll send commands remotely
void loop()
{
  // CommandFactory::read(photoSensor) >> asking the current value for the component with the name stored into the variable
  String value = ccu.execute(CommandFactory::read(photoSensor));

  const bool isBright = value.toInt() > 50;

  // CommandFactory::write(led, !isBright) >> change the value of an 'output' component with that name
  ccu.execute(CommandFactory::write(led, !isBright));
  delay(100);
}

Результаты

  • Включить освещение = выключить светодиод
  • Выключить освещение (или закрыть фоторезистор) = светодиод включен

Да, код ОЧЕНЬ многословен. Но эта библиотека предназначена для дистанционного управления Arduino.

Следующие шаги

  1. Получите команды
  2. Верните данные
  3. Создайте API для получения/настройки информации о хабах
  • Создайте приложение React Native для работы с данными

Источник:

Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу