
Satura rādītājs:
- Piegādes
- 1. darbība: stāsts
- 2. darbība: Aparatūras iestatīšana
- 3. darbība: PROGRAMMATŪRAS IESTATĪŠANA
- 4. solis: teorija un metodoloģija
- 5. darbība. Vietējā laika iegūšana
- 6. darbība: modinātāja iestatīšana
- 7. darbība: skaņas signāla iestatīšana
- 8. darbība: pogu iestatīšana
- 9. darbība. Problēmu novēršana
- 10. solis: Arduino kods
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59


Šī apmācība parāda, kā izveidot viedu modinātāju, izmantojot OLED displeju Magicbit dev panelī, neizmantojot RTC moduli.
Piegādes
- Magicbit
- Kabelis no USB-A līdz mikro-USB
1. darbība: stāsts
Šajā apmācībā mēs uzzināsim, kā izveidot viedu modinātāju, izmantojot Magicbit.
2. darbība: Aparatūras iestatīšana
Pievienojiet Magicbit datoram, izmantojot USB kabeli.
3. darbība: PROGRAMMATŪRAS IESTATĪŠANA
Atveriet savu Arduino IDE un iestatiet tāfeli ar Arduino IDE. Šī saite norāda, kā to izdarīt. Tāpēc mēs iesakām vispirms doties uz saiti un iepazīties ar Magic bit.
magicbit-arduino.readthedocs.io/en/latest/…
Tagad izvēlieties pareizo plates veidu un portu. Šajā gadījumā plates tips ir Magicbit. Bibliotēkas jau ir instalētas, kad Magicbit bibliotēkās.
4. solis: teorija un metodoloģija
Aplūkojot pirmo videoklipu, var redzēt, ka displejā ir 2 ekrāni.
- pulksteņa ekrāns, kas parāda laika detaļas
- trauksmes ekrāns, kurā redzama trauksmes informācija
Lai pārslēgtos starp šiem diviem ekrāniem, Magicbit izmantojām jebkuru divu pogu. Šīs pogas ir savienotas ar 35 (kreisā poga) un 34 (labās pogas) tapām Magicbit ESP32. Lai parādītu laiku un citu informāciju, Magicbit izmantojām iebūvētu OLED displeju.
Parunāsim par to, kā darbojas šie grafiskie ekrāni.
Pulksteņa ekrānā ir analogais pulkstenis, digitālais pulkstenis, datums, mēnesis un gads.
Lai izveidotu analogo pulksteni, mēs izmantojam dažas grafikas funkcijas, kas ir pieejamas grafikas bibliotēkā ar nosaukumu Adafriut GFX. Izmantojot apļa funkciju un līnijas funkciju, mēs izveidojam analogo pulksteņa ciparnīcu. Vienkāršas ģeometriskas funkcijas, ko sauc par sin un cos, izmanto pulksteņa rādītāju pozīcijai. Tātad mēs ievadām tikai leņķi, kas atbilst rotējošo roku laikam. vispirms mēs laiku pārvēršam leņķī šādi.
- minūtes rādītāja leņķis = minūtes*(360/60)
- stundu rokas leņķis = stundas*(360/12)
Leņķis, ko mēra attiecībā pret līniju starp pulksteņa ciparnīcas centru un skaitli 12 pulksteņa ciparnīcā. Izmantojot sin un cos funkcijas, mēs varam aprēķināt stundu un minūšu līniju galu x un y koordinātas. Zemāk esošajā attēlā ir aprakstīts, kā tas notiek.
Saskaņā ar koordinātām mēs ar zīmēšanas līniju drukājam stundu un minūšu rādītāju. Adafruit GFX bibliotēkā ir arī teksta drukas funkcija. Tas palīdz izdrukāt citu informāciju (datumu, mēnesi un laiku cipariem). Jūs varat mainīt analogo pulksteņa pozīciju un teksta pozīcijas, mainot koda parametrus.
Tāpat kā pulksteņa ekrāns, mēs izmantojām teksta drukas funkciju Adafruit GFX bibliotēkā, lai drukātu numurus OLED displejā atbilstošās vietās.
5. darbība. Vietējā laika iegūšana
Svarīgākā pulksteņa daļa ir tā, kā mēs precīzi iegūstam vietējo laiku. Šim nolūkam Magicbit ESP32 varat izmantot ārēju RTC pulksteņa moduli vai iebūvētu RC pulksteni. Šajā projektā mēs izmantojām otro metodi. Šajā metodē mēs izmantojam NTP (tīkla laika protokola) klientu, lai iegūtu vietējo laiku no interneta. Lai piekļūtu internetam, ESP32 izmantojām iebūvētu WIFI iekārtu. Tāpēc pirmajā posmā mēs izmantojam WIFI, lai piekļūtu internetam, nodrošinot SSID un paroli. Tad mums dažās sekundēs jākonfigurē mainīgie gmtOffset un daylightOffset. Šo mainīgo vērtības dažādās pasaules valstīs ir atšķirīgas. gmtOffset nozīmē, cik sekundes jūs atšķiraties no GMT.. Lielākajai daļai ares daylightOffset ir 3600. To var atrast internetā. Pēc pašreizējā vietējā laika mēs vairs neizmantojām WIFI. Jo tad mēs aprēķinām vietējo laiku no ESP32 iebūvētā RC pulksteņa. Tas tiek darīts, izmantojot time.h bibliotēku. Arduino ir vienkāršs piemērs (Arduino> Piemēri> ESP32> Laiks> vienkāršs laiks), lai jūs uzzinātu, kā tas darbojas tālāk. Arī šīs saites varat izmantot, lai iegūtu papildu zināšanas par NTP klientu.
- https://dronebotworkshop.com/esp32-intro/
- https://lastminuteengineers.com/esp32-ntp-server-d…
Pēc pareizā vietējā laika iegūšanas mēs mainām savu laiku, parādot tekstus un leņķi atbilstoši šai laika informācijai katrā cilpā.
6. darbība: modinātāja iestatīšana
Noklikšķinot uz kreisās un labās pogas, varat mainīt modinātāja datuma un laika izvēli. Mainot modinātāja datumu un laiku, noteikti izslēdziet modinātāju. Pēc datuma un laika iestatīšanas ieslēdziet modinātāju. Jo, ja modinātājs ir ieslēgts un kad modināšanas laiks ir vienāds ar jūsu pašreizējo laiku, kad to iestatāt, trauksmes signāls atskanēs. Galvenajā cilpā vienmēr tiek pārbaudīts pašreizējais vietējais laiks un trauksmes informācija ir vienāda. Ja tie ir vienādi, skaņas signāls un Magicbit iebūvētā zaļā gaismas diode darbosies vienas minūtes laikā.
7. darbība: skaņas signāla iestatīšana
Mēs izmantojam PWM impulsu, lai izveidotu skaņas signālu, izmantojot kodā funkciju analogCwrite (). Tā kā visas bibliotēkas funkcijas ir iekļautas ESP32, tas ir derīgs Magicbit. Jūs varat mainīt skaņas signāla skaņas signālu, mainot tā frekvenci un PWM vērtību kodā.
techtutorialsx.com/2017/06/15/esp32-arduin…
Šajā lapā ir aprakstīts, kā skaņas signāls darbojas ar ESP32.
8. darbība: pogu iestatīšana
Lai mainītu visus stāvokļus, Magicbit izmantojām divas iebūvētas spiedpogas. Galvenā cilpa vienmēr pārbauda divu pogu stāvokli. Tā kā tie iekšēji izvilka, normāls stāvoklis ir augsts signāls. Tātad jūs varat redzēt, ka šo tapu digitālā nolasīšana ir 1. Noklusējuma stadijā displejā tiek parādīts pulksteņa interfeiss. Tajā laikā, kad tiek nospiesta kāda no divām pogām, ekrāns tiek mainīts uz modinātāja ekrānu. Mēs arī skaitām laiku sekundēs no pēdējās reizes, kad tika nospiesta poga. Ja šis skaitlis ir lielāks par kādu iepriekš noteiktu ilgumu, displejā tiks parādīts pulksteņa ekrāns.
Kods tiek rakstīts, izmantojot iesācējiem pamatfunkcijas. Tātad kods ir vienkārši saprotams, un jūs varat uzzināt metodi, kā tā darbojas, atsaucoties uz kodu.
9. darbība. Problēmu novēršana
Dažreiz pulkstenis tiek palaists mazliet vēlāk vai arī grafika netiek parādīta pareizi. Sekojošie padomi palīdz atrisināt situāciju.
- Pārliecinieties, vai esat norādījis pareizo SSID un paroli
- Mainiet NTP serveri (internetā varat atrast daudz serveru, kas attiecas uz jūsu reģionu).
- Maina interneta savienojumu. (Iespējams arī mobilais tīklājs).
Jūs varat arī novērst visu, izmantojot seriālo monitoru. Papildus OLED displejam seriālais monitors parāda laika informāciju.
10. solis: Arduino kods
// bibliotēkas OLED displejam
#iekļaut
#include #include #define OLED_RESET 4 #include // wifi Library for connect #define Buzzer 25 int preTime = 0; int skaita = 0; int currentTime = 0; struk tm laika informcija; const char* ssid = "JŪSU SSID"; // wifi detaļas const char* parole = "JŪSU PAROLE"; int alarmDateTime [5] = {1, 1, 2020, 0, 0}; // trauksmes mainīgie int dateIndex = 0; int timeIndex = 0; int selectIndex = -1; bool buzzerOn = 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}}; // atlases taisnstūra const char* ntpServer = "asia.pool.ntp.org"; // servera detaļa const long gmtOffset_sec = 19800; const int daylightOffset_sec = 0; Adafruit_SSD1306 displejs (128, 64); // OLED izmērs nosaka baitu pulksteni baitu pulkstenisRadius = 23; bool state = 0; // ekrāns ieslēgts vai izslēgts Būla Alarm = 0; // trauksmes pašreizējais stāvoklis String alarmState = "Alarm ON"; // signalizācija ieslēgta vai izslēgta // mainīgie saglabātā laika dati char dayName [10]; char dienas skaitlis [3]; ogļu mēnesis [10]; ogļu gads [5]; ogļu stundas [3]; ogles minūtes [3]; ogļu mēneša numurs [3]; char sekundes [3]; // pogu mainīgie bool RightState = 1; bool LeftState = 1; // buzzer mainīgie int channel = 0; int Frekvence = 2000; int PWM = 200; int izšķirtspēja = 8; void setup () {// iestatīt ievadi un izejas pinMode (RightButton, INPUT); pinMode (kreisā poga, INPUT); pinMode (GreenLED, OUTPUT); pinMode (skaņas signāls, OUTPUT); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // intialize display display.display (); kavēšanās (3000); display.clearDisplay (); ledcSetup (0, Frekvence, izšķirtspēja); // konfigurēt pwm parametrus ledcAttachPin (Buzzer, 0); Serial.begin (115200); // intilizēt seriālo komunikāciju // izveidot savienojumu ar WiFi Serial.printf ("Savienojuma izveide ar %s", ssid); WiFi.begin (ssid, parole); while (WiFi.status ()! = WL_CONNECTED) {kavēšanās (500); Sērijas nospiedums ("."); } Serial.println ("SAVIENOTS"); // init un iegūt laiku configTime (gmtOffset_sec, daylightOffset_sec, ntpServer); getTime (); // atvienojiet WiFi, jo tas vairs nav nepieciešams WiFi.disconnect (true); WiFi.mode (WIFI_OFF); display.clearDisplay (); } void loop () {getTime (); // iegūt pašreizējo laiku // saglabāt labās un kreisās pogas stāvokļus RightState = digitalRead (RightButton); LeftState = digitalRead (LeftButton); // čeka pogas nospiež, ja (RightState == 0 || LeftState == 0) {ledcWrite (0, 200); // nospiežot pogu, zummeris izdod pīkstiena skaņas aizkavi (100); if (stāvoklis == 0) {// pāriet uz trauksmes ekrāna kadra stāvokli = 1; // mainīt stāvokli uz trauksmes stāvokli (štats == 1 && (skaits) <5) {// ja trauksmes ekrānā un nav noildzes aprēķinaAlarm (); // aprēķina trauksmes informācijas vērtības showon ekrāna stāvoklis = 0; display.clearDisplay (); clockFace (); // analogās pulksteņa ciparnīcas printLocalTime (); // drukāt laiku pulksteņa ciparnīcā un drukāt citu informāciju} onAlarm (); // salīdzināt modinātāja laiku ar vietējo laiku un ieslēgt trauksmes aizkavi (100); // kavēšanās modinātājs ieslēgts un izslēgts} void clockFace () {// caalog pulksteņa sejas displejs.drawCircle (clockCenterX, clockCenterY, clockRadius, WHITE); // drukāt pulksteņa apli (int cipars = 0; cipars = 5) {// ir tikai 5 selctions.so atiestatīt uz -1 (-1 = vai signalizācija ir ieslēgta vai izslēgta) selectIndex = -1; } dateAndTimeSelection (selectIndex); // mainīt selction} void dateAndTimeSelection (int indekss) {if (index == -1) {// modinātājs ieslēgts vai izslēgts, ja (RightState == 0) {// pārslēdzas starp ieslēgšanas un izslēgšanas trauksmi, ja (alarmState == "Alarm ON") {alarmState = "Alarm OFF"; } else {alarmState = "Alarm ON"; }}} cits {if (RightState == 0) {// citās sadaļās icrement attiecīgais datums vai laiks masīvā alarmDateTime [indekss] = alarmDateTime [indekss] + 1; // indekss ir atlase}} int salīdzināt [4] = {12, 2030, 23, 59}; // datumu un gadu augšējās robežas salīdzinošajā mēnesī [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // mēnešu augšējā robeža int resetValue [4] = {1, 2020, 0, 0}; // sākuma vērtības (int i = 1; i salīdzināt [i - 1]) {alarmDateTime = resetValue [i - 1]; }} if (alarmDateTime [0]> salīdzinājuma mēnesis [alarmDateTime [1] - 1]) {// atiestatīt vērtības, ja mēneši ir lielāki par ierobežojumiem alarmDateTime [0] = 1; }} void showAlarm () {// drukāt trauksmes informāciju String alarmDateTime0 = String (alarmDateTime [0]); // pārvērst dzēlienus, lai parādītu String alarmDateTime1 = String (alarmDateTime [1]); String alarmDateTime2 = String (alarmDateTime [2]); String alarmDateTime3 = String (alarmDateTime [3]); String alarmDateTime4 = String (alarmDateTime [4]); // ja vērtībām ir viens cipars, pievienojiet tām "0". if (alarmDateTime [0]
Ieteicams:
Viedais modinātājs - Intel Edison - Iot RoadShow - Sanpaulu: 4 soļi

Viedais modinātājs - Intel Edison - Iot RoadShow - Sanpaulu: Viens no lielākajiem tikumiem ikvienam, kas dzīvo vai strādā lielā pilsētā, ir laika pārvaldība. Mūsdienās braucieni ir nemainīgi, un, tā kā satiksme ir viens no galvenajiem faktoriem. Domājot par to, es izveidoju nelielu lietojumprogrammu, kas izmanto integrāciju ar Google M
WakeupNow - viedais modinātājs: 8 soļi

WakeupNow - viedais modinātājs: Kā visi zina, studentu dzīve ir ļoti grūta, viņiem ir gara diena ar lekcijām, daudz mājasdarbu un kopumā viņiem ir traka dzīve. Viņiem ir laiks veltīgi, un, ja jūs iesakāt viņiem pievienot dažas stundas dienai, viņi būs priecīgi. Neatbilstoši
Wake Me Up - viedais modinātājs: 6 soļi

Wake Me Up - viedais modinātājs: Wake me up ir gudrs modinātājs, ko var izmantot arī kā viedo gaismu. Iebūvētā LED josla simulē dabisko gaismu, kas ienāk jūsu istabā. Tas ļauj mierīgi, dabiski sākt savu dienu. Modinātājs ir aprīkots arī ar 4*7 segmentu
Viedais modinātājs: viedais modinātājs, kas izgatavots ar Raspberry Pi: 10 soļi (ar attēliem)

Viedais modinātājs: viedais modinātājs, kas izgatavots, izmantojot Raspberry Pi: Vai esat kādreiz vēlējies gudru pulksteni? Ja tā, tas ir risinājums jums! Es izveidoju viedo modinātāju, tas ir pulkstenis, ar kuru jūs varat mainīt modinātāja laiku atbilstoši vietnei. Kad modinātājs atskan, atskanēs skaņa (skaņas signāls) un iedegsies 2 gaismas
GOOB - viedais modinātājs: 15 soļi (ar attēliem)

GOOB - viedais modinātājs: GOOB ir akronīms vārdam "Izkāpt no gultas", kas ir labi piemērots manam projektam. Es gribēju izveidot ierīci, kas varētu mani pamodināt no rīta, jo tas nav vieglākais uzdevums. Galvenā ideja ir tāda, ka modinātājs nepārtrauc modinātāju