Obsah:
- Zásoby
- Krok 1: Príbeh
- Krok 2: NASTAVENIE HARDWARU
- Krok 3: NASTAVENIE SOFTVÉRU
- Krok 4: Teória a metodika
- Krok 5: Získanie miestneho času
- Krok 6: Nastavenie alarmu
- Krok 7: Nastavenie bzučiaka
- Krok 8: Nastavenie tlačidiel
- Krok 9: Riešenie problémov
- Krok 10: Kód Arduino
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Tento tutoriál ukazuje, ako vytvoriť inteligentný budík pomocou displeja OLED na doske vývojára Magicbit bez použitia akéhokoľvek modulu RTC.
Zásoby
- Magicbit
- Kábel USB-A na Micro-USB
Krok 1: Príbeh
V tomto návode sa naučíme, ako vytvoriť inteligentný budík pomocou Magicbit.
Krok 2: NASTAVENIE HARDWARU
Pripojte svoj Magicbit k počítaču pomocou kábla USB.
Krok 3: NASTAVENIE SOFTVÉRU
Otvorte svoje Arduino IDE a nastavte dosku pomocou Arduino IDE. Nasledujúci odkaz popisuje, ako to urobiť. Odporúčame vám teda najskôr prejsť na odkaz a zoznámiť sa s programom Magic bit.
magicbit-arduino.readthedocs.io/en/latest/…
Teraz vyberte správny typ dosky a port. V tomto prípade je typ dosky Magicbit. Knižnice sú už nainštalované, keď sú v knižniciach Magicbit.
Krok 4: Teória a metodika
Keď sa pozriete na prvé video, môžete vidieť, že displej má 2 obrazovky.
- obrazovka s hodinami, ktorá zobrazuje detaily času
- obrazovka alarmu, ktorá zobrazuje podrobnosti o alarme
Na prepínanie medzi týmito dvoma obrazovkami sme použili akékoľvek tlačidlo dvoch v Magicbit. Tieto tlačidlá sú spojené s 35 (ľavým tlačidlom) a 34 (pravým tlačidlom) kolíkom ESP32 v Magicbite. Na zobrazenie času a ďalších podrobností sme použili vstavaný OLED displej v Magicbit.
Porozprávajme sa o tom, ako tieto grafické obrazovky fungujú.
Obrazovka hodín má analógové hodiny, digitálne hodiny, text s dátumom, mesiacom a rokom.
Na vytváranie analógových hodín používame niektoré grafické funkcie, ktoré sú k dispozícii v grafickej knižnici s názvom Adafriut GFX. Použitím kruhovej funkcie a čiarovej funkcie vytvoríme analógový ciferník. Na polohu ručičiek hodín sa používajú jednoduché geometrické funkcie nazývané hriech a cos. Preto zadávame iba uhol, ktorý zodpovedá času otáčania rúk. na to najskôr prevedieme čas na uhol nasledovne.
- uhol minútovej ruky = minúty*(360/60)
- uhol hodín ručičky = hodiny*(360/12)
Uhol meraný vzhľadom na čiaru medzi stredom hodinového ciferníka a číslom 12 v ciferníku. Pomocou funkcií sin a cos môžeme vypočítať súradnice x a y na konci hodinových a minútových čiar. Nasledujúci obrázok popisuje, ako sa mu darí.
Podľa súradníc vytlačíme hodinovú a minútovú ručičku nakreslením čiar. V knižnici Adafruit GFX je k dispozícii aj funkcia tlače textu. Pomáha vytlačiť na displej ďalšie detaily (dátum, mesiac a čas v číslach). Pozíciu analógových hodín a polohu textu môžete zmeniť zmenou parametrov v kóde.
Rovnako ako na hodinách sme použili funkciu tlače textu v knižnici Adafruit GFX na tlač čísel na OLED displeji na príslušných miestach.
Krok 5: Získanie miestneho času
Najdôležitejšou časťou hodín je, ako presne dostaneme miestny čas. Na tento účel môžete použiť externý hodinový modul RTC alebo vstavané RC hodiny v ESP32 v Magicbit. V tomto projekte sme použili druhú metódu. V tejto metóde používame klienta NTP (protokol sieťového času) na získanie miestneho času z internetu. Na prístup na internet sme použili vstavané zariadenie WIFI v ESP32. Preto v prvej fáze používame WIFI na prístup na internet poskytnutím SSID a hesla. Potom by sme mali nakonfigurovať gmtOffset a daylightOffset v premenných v sekundách. Hodnoty týchto premenných sa líšia v závislosti od regiónu na svete. gmtOffset znamená počet sekúnd, v ktorých sa líšite od GMT.. Pre väčšinu ares je denné osvetlenie 3600. Nájdete ho na internete. Potom, čo sme dostali aktuálny miestny čas, sme už WIFI nepoužívali. Pretože potom vypočítame miestny čas z vstavaných RC hodín v ESP32. To sa vykonáva pomocou knižnice time.h. V Arduino je jednoduchý príklad (Arduino> Príklady> ESP32> Čas> simpletime), aby ste sa dozvedeli, ako to funguje ďalej. Tieto odkazy môžete tiež použiť na ďalšie znalosti o klientovi NTP.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Po správnom získaní miestneho času zmeníme čas tak, že v každej slučke zobrazíme texty a uhol podľa časových informácií.
Krok 6: Nastavenie alarmu
Kliknutím na ľavé a pravé tlačidlo môžete zmeniť výber dátumu a času budíka. Pri zmene dátumu a času budíka určite vypnite budík. Po nastavení dátumu a času zapnite budík. Pretože ak je budík zapnutý a keď sa čas budíka rovná vášmu aktuálnemu času pri jeho nastavovaní, zaznie bzučiak budíka. V hlavnej slučke sa vždy kontroluje aktuálny miestny čas a informácie o poplachoch sú rovnaké. Ak sú rovnaké, potom bzučiak a vstavaná zelená LED v Magicbite budú fungovať počas jednej minúty.
Krok 7: Nastavenie bzučiaka
Pulz PWM používame na vytvorenie bzučiaka pomocou funkcie analogCwrite () v kóde. Pretože všetky funkcie knižnice sú v ESP32, je platný pre Magicbit. Pípnutie bzučiaka môžete zmeniť v závislosti od frekvencie a hodnoty PWM v kóde.
techtutorialsx.com/2017/06/15/esp32-arduin…
Táto stránka popisuje, ako funguje bzučiak s ESP32.
Krok 8: Nastavenie tlačidiel
Na zmenu všetkých stavov sme použili dve vstavané tlačidlá v Magicbit. Hlavná slučka vždy kontroluje stav dvoch tlačidiel. Pretože sa vnútorne zastavili, je v normálnom stave vysoký signál. Môžete teda vidieť digitálne čítanie týchto pinov sú 1. V predvolenom stave displej zobrazuje rozhranie hodín. V tom čase, keď je stlačené ktorékoľvek z dvoch tlačidiel, zmení sa obrazovka na obrazovku alarmu. Tiež počítame čas v sekundách od posledného stlačenia tlačidla. Ak je tento počet väčší ako nejaké preddefinované trvanie, potom sa na displeji zobrazí obrazovka s hodinami.
Kód je napísaný pomocou základných funkcií pre začiatočníkov. Kód je teda ľahko zrozumiteľný a metódu, ako funguje, sa môžete naučiť odkazovaním na kód.
Krok 9: Riešenie problémov
Niekedy sa hodiny začnú o niečo neskôr alebo nezobrazujú grafiku správne. Nasledujúce rady pomôžu situáciu vyriešiť.
- Uistite sa, že ste zadali správny SSID a heslo
- Zmeňte server NTP (môžete nájsť veľa serverov z internetu, ktoré sa týkajú vašej oblasti).
- Mení internetové pripojenie. (Možný je aj mobilný hotspot).
Všetko môžete tiež vyriešiť pomocou sériového monitora. Okrem OLED displeja zobrazuje sériový monitor aj časové informácie.
Krok 10: Kód Arduino
// knižnice pre OLED displej
#zahrnúť
#include #include #define OLED_RESET 4 #include // wifi library for connect #include "time.h" // library for use RC clock // define input and output pin names #define RightButton 34 #define LeftButton 35 #define GreenLED 16 #define Buzzer 25 int preTime = 0; int count = 0; int currentTime = 0; struct tm timeinfo; const char* ssid = "VAŠE SSID"; // podrobnosti o wifi const char* heslo = "VAŠE HESLO"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // variabilné alarmy int dateIndex = 0; int timeIndex = 0; int selectIndex = -1; bzučiak zapnutý = 0; int rect [6] [4] = {{5, 0, 118, 16}, {1, 22, 30, 22}, {37, 22, 30, 22}, {73, 22, 55, 22}, {31, 44, 30, 20}, {67, 44, 30, 20}}; // výberový obdĺžnik const char* ntpServer = "asia.pool.ntp.org"; // oddelenie servera const long gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Displej Adafruit_SSD1306 (128, 64); // Veľkosť OLED definuje bajt clockCenterY = (display.height () + 16)/2; // analógový detail hodinového bytu byte clockCenterX = (display.height () - 16)/2; byte clockRadius = 23; bool state = 0; // zapnutie alebo vypnutie obrazovky boolean Alarm = 0; // aktuálny stav alarmu String alarmState = "Alarm ON"; // alarm zapnutý alebo vypnutý // premenlivé uložené časové údaje char dayName [10]; char daynumber [3]; char mesiac [10]; char rok [5]; char hodiny [3]; znakové minúty [3]; char monthnumber [3]; znakové sekundy [3]; // premenné tlačidla bool RightState = 1; bool LeftState = 1; // premenné bzučiaka int channel = 0; int Frekvencia = 2000; int PWM = 200; int rozlíšenie = 8; void setup () {// nastavenie vstupu a výstupu pinMode (RightButton, INPUT); pinMode (LeftButton, INPUT); pinMode (GreenLED, OUTPUT); pinMode (bzučiak, VÝSTUP); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // zintenzívnenie displeja display.display (); oneskorenie (3000); display.clearDisplay (); ledcSetup (0, Frequency, resolution); // konfigurácia parametrov pwm ledcAttachPin (bzučiak, 0); Serial.begin (115200); // zintenzívnenie sériovej komunikácie // pripojenie k WiFi Serial.printf ("Pripojenie k %s", ssid); WiFi.begin (ssid, heslo); while (WiFi.status ()! = WL_CONNECTED) {oneskorenie (500); Serial.print ("."); } Serial.println („PRIPOJENÉ“); // inicializácia a získanie času configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // odpojte WiFi, pretože už nie je potrebný WiFi.disconnect (true); WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // získanie aktuálneho času // uloženie stavov pravého a ľavého tlačidla RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // skontrolujte, či sú tlačidlá stlačené, ak (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // po stlačení tlačidla bzučiak vydá oneskorenie pípnutia (100); if (state == 0) {// zmena stavu rámca obrazovky alarmu = 1; // zmena stavu na stav alarmu RightState = LeftState = 1; // potrebujeme len zmeniť sceern} počet = 0; // reset počítadla} ak (stav == 1 && (počíta) <5) {// ak je na obrazovke alarmu a nie je časový limit stav obrazovky = 0; display.clearDisplay (); clockFace (); // analógový ciferník printLocalTime (); // vytlačenie času na ciferníku a vytlačenie ďalších podrobností} onAlarm (); // porovnanie času budíka s miestnym časom a zapnutie oneskorenia budíka (100); // oneskorenie pre zapnutie a vypnutie budíka} neplatné hodinyFace () {// caalogový ciferník ciferníka.drawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); // tlač hodinkového kruhu pre (int digit = 0; digit = 5) {// má iba 5 selctions.so reset na -1 (-1 = je alarm zapnutý alebo vypnutý) selectIndex = -1; } dateAndTimeSelection (selectIndex); // zmena sekcie} neplatný dateAndTimeSelection (int index) {if (index == -1) {// alarm zapnutý alebo vypnutý, ak (RightState == 0) {// prepína medzi zapnutým a vypnutým alarmom, ak (alarmState == "Alarm ZAPNUTÝ") {alarmState = "Alarm VYPNUTÝ"; } else {alarmState = "Alarm ZAPNUTÝ"; }}} else {if (RightState == 0) {// v iných sekciách icrementujte dátum alebo čas v poli alarmDateTime [index] = alarmDateTime [index] + 1; // index je výber}} int porovnať [4] = {12, 2030, 23, 59}; // horné limity dátumov a rokov v porovnaní [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // horná lišta mesiacov int resetValue [4] = {1, 2020, 0, 0}; // počiatočné hodnoty pre (int i = 1; porovnávam [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> porovnať [alarmDateTime [1] - 1]) {// reset vlaues, ak sú mesiace väčšie ako ich limity alarmDateTime [0] = 1; }} void showAlarm () {// tlač podrobností alarmu String alarmDateTime0 = String (alarmDateTime [0]); // prevod stingov na zobrazenie String alarmDateTime1 = String (alarmDateTime [1]); String alarmDateTime2 = String (alarmDateTime [2]); String alarmDateTime3 = String (alarmDateTime [3]); String alarmDateTime4 = String (alarmDateTime [4]); // ak majú hodnoty jednu číslicu 1, pridajte k nim „0“. ak (alarmDateTime [0]
Odporúča:
Inteligentný parkovací systém na báze IoT využívajúci NodeMCU ESP8266: 5 krokov
Inteligentný parkovací systém na báze IoT využívajúci NodeMCU ESP8266: V dnešnej dobe je hľadanie parkovania vo frekventovaných oblastiach veľmi ťažké a neexistuje žiadny systém na získavanie podrobností o parkovaní online. Predstavte si, že by ste vo svojom telefóne mohli získať informácie o dostupnosti parkovacieho miesta a nemusíte sa túlať a kontrolovať
WakeupNow - inteligentný budík: 8 krokov
WakeupNow - Inteligentný budík: Ako každý vie, život študentov je veľmi ťažký, majú dlhý deň s prednáškami, veľa domácich úloh a vo všeobecnosti majú bláznivý život. Nemajú čas na nič, a ak im navrhnete, aby si pridali niekoľko hodín dňa, budú radi. Unfo
Inteligentný budík: inteligentný budík vyrobený z Raspberry Pi: 10 krokov (s obrázkami)
Inteligentný budík: Inteligentný budík vyrobený z Raspberry Pi: Už ste niekedy chceli inteligentné hodiny? Ak je to tak, toto je riešenie pre vás! Vyrobil som inteligentný budík, toto sú hodiny, v ktorých môžete zmeniť čas budíka podľa webových stránok. Keď sa spustí alarm, zaznie zvuk (bzučiak) a 2 svetlá
Inteligentný riadiaci systém pre robotické automobily využívajúci krokový motor starej diskety/CD mechaniky: 8 krokov (s obrázkami)
Inteligentný riadiaci systém pre robotické automobily využívajúci krokový motor starých diskiet/diskov CD: Inteligentný riadiaci systém pre robotické automobily Máte strach vytvoriť dobrý systém riadenia pre svoje robotické auto? Toto je vynikajúce riešenie, ktoré umožňuje používať staré disketové/ CD/ DVD jednotky. dajte si pozor a urobte si o tom predstavu Navštívte georgeraveen.blogspot.com
Inteligentný zavlažovací systém využívajúci IoT # „postavený na BOLT“: 6 krokov (s obrázkami)
Inteligentný zavlažovací systém využívajúci IoT # „Postavený na BOLT“: Inteligentný zavlažovací systém je zariadenie založené na IoT, ktoré je schopné automatizovať zavlažovací proces analyzovaním vlhkosti pôdy a klimatických podmienok (napr. Prší). Tiež údaje zo senzorov budú byť zobrazené v grafickej forme na BOLT