Беспроводной индикатор всего на свете за 8$

в 11:07, , рубрики: Песочница, метки: , , ,

image

Наверно многие из вас задумывались о простом индикаторе событий, почты, состояния серверов и т.д., но сегодняшний рынок не предоставляет готовых решений, способных охватить все возможные уведомления. В результате изучения различных модулей для Arduino мне на глаза попалась панель 4х4 из 16 RGB светодиодов для управления которыми достаточно только одного выхода микроконтроллера.

image

Для управления светодиодами есть специальная библиотека «NeoPixelBus» под Arduino. Вдоволь наигравшись с моргающими светодиодами было решено собрать простой индикатор событий, платформой для которого стал модуль на чипе ESP8266, а управление основано на GET-запросах.

image

Был заказан модуль с платой на которой распаяны подтягивающие сопротивления и оставлено место под регулятор напряжения (Светодиоды работают от 5В, беспроводной модуль от 3,3В). Регулятор напряжения я выпаял из старой железяки, предварительно убедившись, что он выдает 3,3 В. Впаяв регулятор, необходимо удалить нулевое сопротивление с другой стороны платы. Соединив питание обоих плат, пин 14 с входом LED-матрицы, получился вот такой «бутерброд» (4см х 4см х 1см):

image

Остается залить новую прошивку и саму программу управления. Соединив собранное устройство с Arduino по следующей схеме, была загружена последняя прошивка через программу «XTCOM_UTILITY». (Для режима прошивки-программирования необходимо замкнуть пин 00 на землю)

image

Управление светодиодами решено было осуществить по следующей схеме запросов:

image

Яркость определенного канала регулируется в пределах от 0 до 255, тем самым можно получить любой цвет, любой яркости. Запрос ip/00 тушит все светодиоды.

Программировал в среде Arduino, подключив необходимые библиотеки, сам код программы:

Код программы

#include <NeoPixelBus.h>
#include <ESP8266WiFi.h>
#define pixelCount 16 //LEDs 
NeoPixelBus strip = NeoPixelBus(pixelCount, 14, NEO_GRB); //14 - GPIO14

const char *ssid = "*******"; //WiFi name
const char *password = "*******"; //WiFi key


WiFiServer server(80);

void setup() {
  pinMode(2, OUTPUT);
  digitalWrite(2, 0);
  WiFi.begin(ssid, password);
  strip.Begin();
  strip.Show();
  server.begin();
}

void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  while(!client.available()){
    delay(1);
  }
  
  String data = client.readStringUntil('r');
  client.flush();
  String str,R,G,B,N;
  str = String ("GET /");
  if (str== data.substring(0,5)) {
      digitalWrite(2, 1);
      N=data.substring(5,7);
      R=data.substring(7,10);
      G=data.substring(10,13);
      B=data.substring(13,16);
        if (N.toInt()==00) {
          for (int i=0; i< pixelCount; i++){
          strip.SetPixelColor(i,0);
          strip.Show(); 
          }
        }
      strip.SetPixelColor(N.toInt()-1,RgbColor (R.toInt(),G.toInt(),B.toInt()));
      strip.Show();

      }
client.flush();

String s = "HTTP/1.1 200 OKrnContent-Type: text/htmlrnrn<!DOCTYPE HTML>rn<html>rnOK ";
s += "</html>n";
client.print(s);
digitalWrite(2, 0);
delay(1);
}

Итоговый пример работы устройства:

image

У меня все это питается через USB кабель от телефонной зарядки, можно припаять микро USB разъем для большей красоты и миниатюрности.

Цена устройства около 8$, знания электротехники-програмирования минимальны, время на пайку незначительное. Если недостаточно индикаторов, то можно купить светодиодную матрицу 8х8.

С радостью отвечу на все вопросы.

Автор: Испанский лётчик

Источник

Поделиться новостью

* - обязательные к заполнению поля