Часы на микроконтроллере 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
Текст программы для 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-zn6cc2ed7c
2 жыл бұрын
Спасибо!
,,кольцо,, продаётся готовое или сам делал?
@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-zn6cc2ed7c
2 жыл бұрын
Я сделал "часовую стрелку" толстую, т.е. горит весь сектор (на обложке это зеленый сектор между 4 и 5 часами). Можно сделать как-то иначе, например, чтобы горел не весь сектор а один из 4-х светодиодов в зависимости от количества минут.
@user-wc4zd5te7p
2 жыл бұрын
@@user-zn6cc2ed7c где в скетче поменять чтобы часовая была из 1 пикселя?
@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-zn6cc2ed7c спасибо за разъяснение...
какой пароль на подключение,не могу подключиться?
@user-zn6cc2ed7c
4 ай бұрын
thereisnospoon, он прямо в тексте программы прописан
@user-eo1vd2lu9u
4 ай бұрын
@@user-zn6cc2ed7c Спасибо,все работает,понравилось.Как можно сделать,чтобы отображалась секундная точка?
А если просто подключить контроллер для ленты с пультом с али за 200руб то получиться 300 эффектов примеры на канале
Ну а схема то где?
@ilyapermyakov3332
2 жыл бұрын
Схема самая простая :) кольцо подключено к выходу контроллера D1 (#define PIN D1).
@user-zn6cc2ed7c
2 жыл бұрын
Так и есть.
@user-wc4zd5te7p
Жыл бұрын
@@user-zn6cc2ed7c так что здесь часов реального времени то и нет совсем , время берется с инета?
@user-zn6cc2ed7c
Жыл бұрын
Часы реального времени получается, что в самом контроллере. За это отвечает библиотека TimeLib.h. То есть контроллер сам считает время без помощи специальных микросхем. Можно, конечно, придумать, чтобы из инета время бралось, естественно потребуется переписывать программу.
@user-wc4zd5te7p
Жыл бұрын
@@user-zn6cc2ed7c не понятно а зачем он тогда подключается к вай фай сети?