Часы на микроконтроллере ESP8266 и кольце из адресных светодиодов WS2812. Программа для Arduino IDE.

Тәжірибелік нұсқаулар және стиль

Часы на микроконтроллере ESP8266 и кольце из адресных светодиодов WS2812. Кольцо содержит в себе 60 светодиодов. Минута обозначается светящимся светодиодом (красным), час обозначается светящимся сектором (зеленым). Для удобства восприятия циферблата белым светятся часовые метки в позиции 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 и 11 часов. На микроконтроллере "подняты" WiFi-точка доступа и WEB-сервер. Установка времени на часах производится через запрос к этому WEB-серверу, например, из браузера мобильного телефона. В программе использованы библиотеки Adafruit_NeoPixel, TimeLib, а также стандартные библиотеки для реализации WEB-сервера и точки доступа.
Текст программы для Arduino IDE размещен в комментариях, так как в описании оказывается нельзя использовать угловые скобки.
#esp8266 #ws2812 #arduino #ардуино #часы #
handmade #хэндмэйд

Пікірлер: 24

  • @user-zn6cc2ed7c
    @user-zn6cc2ed7c3 жыл бұрын

    Текст программы для Arduino IDE: #include #define PIN D1 #define NUMPIXELS 60 #define BRIGHTNESS 50 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino pin number (most are valid) // Parameter 3 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) // NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products) Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); #include #include #include #include #ifndef APSSID #define APSSID "ESPap" #define APPSK "thereisnospoon" #endif /* Set these to your desired credentials. */ const char *ssid = APSSID; const char *password = APPSK; int GlobMin = 0; ESP8266WebServer server(80); void handleRoot() { String out = ""; int out2; // Установка времени if( server.hasArg("settime") ){ out = server.arg("settime"); Serial.println(out); int arg1 = out.substring(0,2).toInt(); int arg2 = out.substring(2,4).toInt(); int arg3 = out.substring(4,6).toInt(); int arg4 = out.substring(6,8).toInt(); int arg5 = out.substring(8,10).toInt(); int arg6 = out.substring(10).toInt(); setTime(arg1,arg2,arg3,arg4,arg5,arg6); clock_face(arg1, arg2); } out+="Now " + String(hour()) + ":" + String(minute()) + ":" + String(second()) + " " + String(day()) + "." + String(month()) + "." + String(year()) + ""; //server.send(200, "text/html", "You are connected"); //server.send(200, "text/html", "Now " + String(hour()) + ":" + String(minute()) + ":" + String(second()) + String(day())+""); server.send ( 200, "text/html", out ); } // the setup function runs once when you press reset or power the board void setup() { int j; int i; strip.begin(); // This initializes the NeoPixel library. delay(2000); Serial.begin(115200); Serial.println(); Serial.print("Configuring access point..."); /* You can remove the password parameter if you want the AP to be open. */ WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.on("/", handleRoot); server.begin(); Serial.println("HTTP server started"); // Demo быстрое прохождение всего циферблата for(j=0; j

  • @user-fo5yw1jp7j
    @user-fo5yw1jp7j3 жыл бұрын

    Какая классная задумка!!

  • @nikolaythird1454
    @nikolaythird14542 жыл бұрын

    Креативно!

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    2 жыл бұрын

    Спасибо!

  • @user-mo9zp4xn6g
    @user-mo9zp4xn6g Жыл бұрын

    ,,кольцо,, продаётся готовое или сам делал?

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    Жыл бұрын

    Кольцо на алишке продается.

  • @user-eo1vd2lu9u
    @user-eo1vd2lu9u4 ай бұрын

    Как можно сделать,чтобы отображалась секундная точка?

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    4 ай бұрын

    Объявляем еще одну переменную в начале loop, которая будет хранить секунды, например int TekSec; TekSec = second(); Понадобится еще глобальная переменная секунд, например int GlobSec = 0; Далее, нужно изменить код программы if (GlobMin != TekMin){ TekHour = hour(); clock_face(TekHour, TekMin); }, чтобы здесь проверялось на неравенство секунд, а не минут. Последнее, что нужно сделать, в функции clock_face сделать наложение секундной точки после вывода минутной стрелки. Как-то так, понятно, что придется отладить программу.

  • @user-uj3yq9gs8h
    @user-uj3yq9gs8h2 жыл бұрын

    С минутной "стрелкой" ясно, а вот часовая "стрелка" ? Я так понимаю надо ориентироваться на первые по ходу светодиоды для определения часа. Несколько не удобно.

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    2 жыл бұрын

    Я сделал "часовую стрелку" толстую, т.е. горит весь сектор (на обложке это зеленый сектор между 4 и 5 часами). Можно сделать как-то иначе, например, чтобы горел не весь сектор а один из 4-х светодиодов в зависимости от количества минут.

  • @user-wc4zd5te7p

    @user-wc4zd5te7p

    2 жыл бұрын

    @@user-zn6cc2ed7c где в скетче поменять чтобы часовая была из 1 пикселя?

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    Жыл бұрын

    Вот в этом месте, вместо четырех пикселов оставьте один (закомментируйте "лишние" строки): strip.setPixelColor(pHour*5+1, strip.Color(0,100,0)); strip.setPixelColor(pHour*5+2, strip.Color(0,100,0)); strip.setPixelColor(pHour*5+3, strip.Color(0,100,0)); strip.setPixelColor(pHour*5+4, strip.Color(0,100,0)); Но мне кажется, что сектором понятнее.

  • @user-wc4zd5te7p

    @user-wc4zd5te7p

    Жыл бұрын

    @@user-zn6cc2ed7c спасибо за разъяснение...

  • @user-eo1vd2lu9u
    @user-eo1vd2lu9u4 ай бұрын

    какой пароль на подключение,не могу подключиться?

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    4 ай бұрын

    thereisnospoon, он прямо в тексте программы прописан

  • @user-eo1vd2lu9u

    @user-eo1vd2lu9u

    4 ай бұрын

    @@user-zn6cc2ed7c Спасибо,все работает,понравилось.Как можно сделать,чтобы отображалась секундная точка?

  • @aleks-s1442
    @aleks-s14422 жыл бұрын

    А если просто подключить контроллер для ленты с пультом с али за 200руб то получиться 300 эффектов примеры на канале

  • @user-wc4zd5te7p
    @user-wc4zd5te7p3 жыл бұрын

    Ну а схема то где?

  • @ilyapermyakov3332

    @ilyapermyakov3332

    2 жыл бұрын

    Схема самая простая :) кольцо подключено к выходу контроллера D1 (#define PIN D1).

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    2 жыл бұрын

    Так и есть.

  • @user-wc4zd5te7p

    @user-wc4zd5te7p

    Жыл бұрын

    @@user-zn6cc2ed7c так что здесь часов реального времени то и нет совсем , время берется с инета?

  • @user-zn6cc2ed7c

    @user-zn6cc2ed7c

    Жыл бұрын

    Часы реального времени получается, что в самом контроллере. За это отвечает библиотека TimeLib.h. То есть контроллер сам считает время без помощи специальных микросхем. Можно, конечно, придумать, чтобы из инета время бралось, естественно потребуется переписывать программу.

  • @user-wc4zd5te7p

    @user-wc4zd5te7p

    Жыл бұрын

    @@user-zn6cc2ed7c не понятно а зачем он тогда подключается к вай фай сети?

Келесі