Satura rādītājs:

Viedais modinātājs, izmantojot Magicbit (Arduino): 10 soļi
Viedais modinātājs, izmantojot Magicbit (Arduino): 10 soļi

Video: Viedais modinātājs, izmantojot Magicbit (Arduino): 10 soļi

Video: Viedais modinātājs, izmantojot Magicbit (Arduino): 10 soļi
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Jūlijs
Anonim
Image
Image

Šī 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: