![Simsiz Şifrəli Əlaqə Arduino: 5 addım Simsiz Şifrəli Əlaqə Arduino: 5 addım](https://i.howwhatproduce.com/images/006/image-17809-j.webp)
Mündəricat:
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-23 12:54
![Simsiz Şifrəli Əlaqə Arduino Simsiz Şifrəli Əlaqə Arduino](https://i.howwhatproduce.com/images/006/image-17809-1-j.webp)
Hamıya salam, Bu ikinci məqalədə, simsiz ünsiyyətinizi qorumaq üçün Atecc608a çipini necə istifadə edəcəyinizi izah edəcəyəm. Bunun üçün Simsiz hissə və Arduino UNO üçün NRF24L01+ istifadə edəcəyəm.
ATECC608A mikro çipi MicroChip tərəfindən hazırlanmış və bir çox təhlükəsizlik vasitələrinə malikdir. Məsələn, bu çip ECC Keys, AES Keys (AES 128 üçün) və SHA2 Hash saxlaya bilər.
Məqalə: NRF24L01 + Arduino UNO + ATECC608A
İki IoT Obyekti arasında ünsiyyət əsnasında birdən çox hücum ola bilər: Yüngül adam, Məlumatın surəti və daha çox.. Deməli fikrim çox sadədir:
- İki və ya daha çox IoT obyekti arasında şifrələnmiş məlumatların istifadəsi.
- Aşağı qiymətli təchizatlar
- Bir Arduino UNO ilə işləyə bilər
Mənim vəziyyətimdə istifadə edirəm
- AES Açarımı saxlamaq və məlumatlarımı şifrələmək/deşifr etmək üçün Atecc608a.
- Arduino Uno mikro nəzarətçi olaraq
- Məlumatlarımı göndərmək üçün NRF24L01
Bu layihə üçün bu addımları yerinə yetirməlisiniz:
- ATECC608A çipini qurun
- Dövr edin (Master Node və Slave Node)
- Kod hissəsi
- İrəli gedin!
"ATECC608A çipini qurun" ilk addımları üçün hər addımı sırayla izah edən başqa bir məqalə yazdım. Bağlantı buradadır:
İndi başla!
Təchizat
Bu layihə üçün sizə lazımdır:
- 2 Arduino UNO və ya Arduino NANO və ya Arduino Mega
- Bir az tel
- 2 Atecc608a (hər birinin qiyməti 0.60 dollardan azdır)
- 2 NRF24L01+
- 2 kondansatör (10 μF)
- Çörək lövhələri
ATECC608A çipinin necə qurulduğunu izah edən məqaləmə keçid -> Atecc608a -nın necə qurulacağını.
Addım 1: 1. Atecc608a qurun
![1. Atecc608a qurun 1. Atecc608a qurun](https://i.howwhatproduce.com/images/006/image-17809-2-j.webp)
![1. Atecc608a qurun 1. Atecc608a qurun](https://i.howwhatproduce.com/images/006/image-17809-3-j.webp)
ATECC608A qurmaq üçün atılacaq hər addımı ətraflı izah etməyəcəyəm, çünki bunu etmək üçün hər addımı izah edən tam bir məqalə yazdım. Bunu qurmaq üçün bu maddənin "2. Çipin Konfiqurasiyası (Atecc608a)" adlı "Adım 4" ə əməl etməlisiniz.
Bağlantı belədir: ATECC608A necə qurulacaq
Ayrıca, eyni konfiqurasiyanı Atecc608a, master tərəfi və qul tərəfi üçün qoymalısınız, əks halda məlumatlarınızın şifrəsini aça bilməyəcəksiniz
Xəbərdarlıq:
Bu çipi qurmaq üçün yuxarıdakı məqalənin bütün addımlarını ardıcıllıqla yerinə yetirməlisiniz. Bir addım yoxdursa və ya çip kilidlənmirsə, bu layihəni edə bilməzsiniz
Qalan:
Bunun üçün izləniləcək addım:
- Bir konfiqurasiya şablonu yaradın
- Bu şablonu çipə yazın
- Konfiqurasiya Zonasını kilidləyin
- AES Açarınızı (128 Bit) bir yuvaya yazın
- Məlumat Zonasını kilidləyin
Addım 2: 2. Dövrə Dizaynı (Usta və Kölə)
![2. Dövrün Dizaynı (Usta və Kölə) 2. Dövrün Dizaynı (Usta və Kölə)](https://i.howwhatproduce.com/images/006/image-17809-4-j.webp)
![2. Dövrün Dizaynı (Usta və Kölə) 2. Dövrün Dizaynı (Usta və Kölə)](https://i.howwhatproduce.com/images/006/image-17809-5-j.webp)
Bu layihədə bir Master Node və bir Slave Node olacaq.
Master düyün, node köməyi ilə göndərilən məlumatları aydın şəkildə çap edəcək. Hər X dəfə qul nodundan məlumat istəyəcək.
Qul nodu "şəbəkəni" dinləyəcək və "İstək məlumatı" aldıqda onu yaradacaq, şifrələyəcək və master düyünə göndərəcək.
Hər iki tərəf üçün də dövrə hakim və kölə eynidır:
- Bir arduino Nano
- Bir ATECC608A
- Bir NRF24L01
Dövrəni bu addıma bağladım (yuxarıdakı şəklə bax).
Arduino UNO üçün ATECC608A üçün bu, 8 sancaqdır. Yuxarıdakı "üst görünüşü" əlavə etdim:
- ARDUINO 3.3V -> PIN 8 (Atecc608a)
- ARDUINO GND -> PIN 4 (Atecc608a)
- ARDUINO A4 (SDL) -> PIN 5 (Atecc608a)
- ARDUINO A5 (SCL) -> PIN 6 (Atecc608a)
Arduino üçün NRF24L01 üçün:
- ARDUINO 3.3V -> VCC (nrf24l01)
- ARDUINO GND -> GND (nrf24l01)
- ARDUINO 9 -> CE (nrf24l01)
- ARDUINO 10 -> CSN (nrf24l01)
- ARDUINO 11 -> MOSI (nrf24L01)
- ARDUINO 12 -> MISO (nrf24l01)
- ARDUINO 13 -> SCK (nrf24l01)
- ARDUINO 3 -> IRQ (nrf24l01) -> yalnız Əsas rejimdə istifadə edilməyən Qulluq düyünü üçün
NRF24L01 -in IRQ pinindən niyə istifadə olunur
IRQ pin çox faydalıdır, bu pin NRF24L01 tərəfindən bir paket alındıqda (LOW) deməyə imkan verir, buna görə də qul nodeunu oyatmaq üçün bu pinə bir Interrupt bağlaya bilərik.
Addım 3: 3. Kod (Qul və Usta)
![3. Kod (Qul və Usta) 3. Kod (Qul və Usta)](https://i.howwhatproduce.com/images/006/image-17809-6-j.webp)
Qul Node
Qul Node üçün güc qənaətindən istifadə edirəm, çünki hər zaman qulaq asmaq lazım deyil.
Necə işləyir: qul nodu qulaq asır və "Wake UP paketi" almasını gözləyir. Bu paket, Master node tərəfindən quldan məlumat istəmək üçün göndərilir.
Mənim vəziyyətimdə iki int bir sıra istifadə edirəm:
// Oyan paketi
const int wake_packet [2] = {20, 02};
Düyüm bir paket alırsa,
- oyanır, bu paketi oxuyun, əgər paket "Uyan"
- məlumatları yaradır,
- məlumatları şifrələmək,
- məlumatları ustaya göndərin, ACK paketini gözləyin,
- yatmaq
AES Şifrələmə üçün 9 nömrəli yuvada bir açar istifadə edirəm.
Bu, Slave node üçün kodumdur
#"Arduino.h" daxil edin #"avr/yuxu.h" daxil edin #"avr/wdt.h" daxil edin
#"SPI.h" daxil edin
#"nRF24L01.h" daxil edin "RF24.h" daxil edin
#"Wire.h" daxil edin
// ATECC608A kitabxanası
#"ATECCX08A_Arduino/cryptoauthlib.h" daxil edin #"AES BASIC/aes_basic.h" daxil edin
#müəyyən ID_NODE 255
#AES_KEY (uint8_t) 9 təyin edin
ATCAIfaceCfg cfg;
ATCA_STATUS vəziyyəti;
RF24 radiosu (9, 10);
const uint64_t masteraddresse = 0x1111111111;
const uint64_t slaveaddresse = 0x1111111100;
/**
* / qısa fasilə təyin edildikdə yerinə yetirilən funksiya (IRQ LOW) * * */ void wakeUpIRQ () {while (radio.available ()) {int data [32]; radio.read (& data, 32); if (data [0] == 20 && data [1] == 02) {float temp = 17.6; float hum = 16.4;
uint8_t məlumatları [16];
uint8_t şifrəli məlumatlar [16];
// Bütün dəyərlərimi təyin etmək üçün bir String yaradın
// Hər bir dəyər "|" ilə ayrılır və "$" məlumatların sonu deməkdir // XƏBƏRDARLIQ: 11 uzunluqdan az olmalıdır String tmp_str_data = String (ID_NODE) + "|" + String (temp, 1) + "|" + Sətir (zümzümə, 1) + "$"; // 11 Serial.println ölçüsü ("tmp_str_data:" + tmp_str_data);
tmp_str_data.getBytes (data, sizeof (data));
// Məlumatları şifrələyin
ATCA_STATUS status = aes_basic_encrypt (& cfg, data, sizeof (data), cypherata, AES_KEY); if (status == ATCA_SUCCESS) {uzun rand = təsadüfi ((uzun) 10000, (uzun) 99999);
// ilk üç rəqəmə əsaslanan UUID yaradın = ID node
String uuid = String (ID_NODE) + String (rand); // Ölçüsü 8
uint8_t tmp_uuid [8];
uint8_t data_to_send [32];
uuid.getBytes (tmp_uuid, sizeof (tmp_uuid) + 1);
memcpy (data_to_send, tmp_uuid, sizeof (tmp_uuid));
memcpy (data_to_send + sizeof (tmp_uuid), cypherdata, sizeof (cypherdata)); // Radio.stopListening dinləməyi dayandırın ();
bool rslt;
// Məlumat Göndər rslt = radio.write (& data_to_send, sizeof (data_to_send)); // Dinləməyə başlayın radio.startListening (); if (rslt) {// Bitmə və yuxu rejimi Serial.println (F ("Bitti")); }}}}}
boş quraşdırma ()
{Serial.begin (9600);
// Kitabxana qurucusunu işə salın
cfg.iface_type = ATCA_I2C_IFACE; // Rabitə növü -> I2C rejimi cfg.devtype = ATECC608A; // Çip növü cfg.atcai2c.slave_address = 0XC0; // I2C ünvanı (standart dəyər) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Oyanmanın gecikməsi (1500 ms) cfg.rx_retries = 20;
radio.begin ();
radio.setDataRate (RF24_250KBPS); radio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5);
radio.openWritingPipe (master ünvanı);
radio.openReadingPipe (1, slaveaddresse); // 3 -cü pinə kəsik əlavə edin // 2 -ci pinin kəsilməsini istəyirsinizsə, 1 -i O ilə dəyişdirin // FALLING MODE = POW LOW attachInterrupt -da pin (1, wakeUpIRQ, FALLING); }
boşluq döngəsi ()
{ // Ehtiyac yoxdur }
Usta Node
Master node, hər 8 saniyədə bir oyanır və qul Node'dan məlumat tələb edir
Necə işləyir: Usta nodu qula "WakeUP" paketi göndərir və gözlədikdən sonra qulla məlumat daxil olur.
Mənim vəziyyətimdə iki int bir sıra istifadə edirəm:
// Oyan paketi
const int wake_packet [2] = {20, 02};
Usta bir WakeUp paketi göndərdikdən sonra qul node bir ACK paketi göndərirsə:
- Master Dinləmə rejimində quruldu və ünsiyyət gözləyin
- Əgər ünsiyyət
- 8 ilk baytı çıxarın, kimlik düyümüdürsə, 8 baytın üç ilk baytını talan edin.
- 16 bayt şifrəni çıxarın
- Məlumatların deşifrini açın
- Məlumatları Serial şəklində çap edin
- Yuxu rejimi
AES Şifrələmə üçün 9 nömrəli yuvada bir açar istifadə edirəm.
Bu, Master node üçün kodumdur
#"Arduino.h" daxil edin
#include "avr/sleep.h" #include "avr/wdt.h" #include "SPI.h" #include "nRF24L01.h" #include "RF24.h" #include "Wire.h" // ATECC608A library #include "ATECCX08A_Arduino/cryptoauthlib.h" #include "AES BASIC/aes_basic.h" #define ID_NODE 255 #define AES_KEY (uint8_t) 9 ATCAIfaceCfg cfg; ATCA_STATUS vəziyyəti; RF24 radiosu (9, 10); const uint64_t masteraddresse = 0x1111111111; const uint64_t slaveaddresse = 0x1111111100; // Wake UP paketi const int wake_packet [2] = {20, 02}; // gözətçi müdaxiləsi ISR (WDT_vect) {wdt_disable (); // gözətçini deaktiv edin} boş yuxu rejimi () {// ADC ADCSRA -nı deaktiv edin = 0; // müxtəlif "sıfırlama" bayraqlarını sil MCUSR = 0; // dəyişikliklərə icazə verin, sıfırlamanı deaktiv edin WDTCSR = bit (WDCE) | bit (WDE); // fasilə rejimini və WDTCSR = bit (WDIE) aralığını təyin edin | bit (WDP3) | bit (WDP0); // WDIE qurun və 8 saniyə gecikdir wdt_reset (); // gözətçi set_sleep_mode (SLEEP_MODE_PWR_DOWN) sıfırlayın; noInterrupts (); // zamanlanmış ardıcıllıq sleep_enable (); // MCUCR = bit (BODS) proqramında qəhvəyi söndürmə funksiyasını söndürün | bit (BODSE); MCUCR = bit (BODS); kəsir (); // növbəti təlimatın yerinə yetirilməsini təmin edir sleep_cpu (); // bir tədbir olaraq yuxunu ləğv edin sleep_disable (); } void setup () {Serial.begin (9600); // Kitabxana qurucusunu işə salın cfg.iface_type = ATCA_I2C_IFACE; // Rabitə növü -> I2C rejimi cfg.devtype = ATECC608A; // Çip növü cfg.atcai2c.slave_address = 0XC0; // I2C ünvanı (standart dəyər) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Oyanmanın gecikməsi (1500 ms) cfg.rx_retries = 20; radio.begin (); radio.setDataRate (RF24_250KBPS); radio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5); radio.openWritingPipe (slaveaddresse); radio.openReadingPipe (1, masteraddresse); } void loop () {bool rslt; // Məlumat Göndər rslt = radio.write (& wake_packet, sizeof (wake_packet)); if (rslt) {// Dinləməyə Başla radio.startListening (); while (radio.available ()) {uint8_t cavab [32]; radio.read (& cavab, ölçüsü (cavab)); uint8_t node_id [3]; uint8_t şifrəsi [16]; memcpy (node_id, cavab, 3); memcpy (şifrə, cavab + 3, 16); if ((int) node_id == ID_NODE) {uint8_t çıxış [16]; ATCA_STATUS status = aes_basic_decrypt (& cfg, cypher, 16, output, AES_KEY); if (status == ATCA_SUCCESS) {Serial.println ("Şifrələnmiş məlumatlar:"); for (size_t i = 0; i <16; i ++) {Serial.print ((char) çıxış ); }}}}} başqa {Serial.println ("Uyandırma Paketi üçün qəbul edilmir"); } // Yuxu rejimi 8 saniyəlik yuxu rejimi (); }
Sualınız varsa, cavablandırmaq üçün buradayam
Addım 4: 4. İrəli gedin
Bu nümunə sadədir, buna görə də bu layihəni inkişaf etdirə bilərsiniz
Təkmilləşdirmələr:
- AES 128 əsasdır və daha təhlükəsiz olmaq üçün AES CBC olaraq başqa bir AES alqoritmindən istifadə edə bilərsiniz.
- Simsiz modulu dəyişdirin (NRF24L01 23 Bayt yüklə məhdudlaşır)
- …
Bir yaxşılaşma görürsünüzsə, bunu müzakirə sahəsinə izah edin
Addım 5: Nəticə
Ümid edirəm bu məqalə sizin üçün faydalı olacaq. Mətnimdə səhv etsəm, üzr istəyirəm, amma ingilis dili mənim ana dilim deyil və yazdığımdan daha yaxşı danışıram.
Hər şeyi oxuduğunuz üçün təşəkkürlər.
Zövq alın.
Tövsiyə:
Arduino, Esp8266 və ya Esp32 üçün aşağı qiymətli E32 (sx1278/sx1276) cihazı ilə LoRa 3Km -dən 8Km -ə qədər Simsiz Əlaqə: 15 Addım
![Arduino, Esp8266 və ya Esp32 üçün aşağı qiymətli E32 (sx1278/sx1276) cihazı ilə LoRa 3Km -dən 8Km -ə qədər Simsiz Əlaqə: 15 Addım Arduino, Esp8266 və ya Esp32 üçün aşağı qiymətli E32 (sx1278/sx1276) cihazı ilə LoRa 3Km -dən 8Km -ə qədər Simsiz Əlaqə: 15 Addım](https://i.howwhatproduce.com/images/001/image-540-15-j.webp)
Arduino, Esp8266 və ya Esp32 üçün E32 (sx1278/sx1276) Cihazı ilə LoRa 3Km -dən 8Km -ə qədər Simsiz Əlaqə: Çox güclü, sadə və ucuz bir cihaz olan LoRa cihazının Semtech seriyasına əsaslanan EBYTE E32 -ni idarə etmək üçün bir kitabxana yaradıram. Buradakı 3Km versiyası, Buradakı 8Km versiyası 3000m -dən 8000m -ə qədər məsafədə işləyə bilərlər və bir çox xüsusiyyətlərə malikdirlər
Uzun Mesafe, 1.8km, Arduino-dan Arduino ilə HC-12 ilə Simsiz Əlaqə: 6 Addım (Şəkillərlə)
![Uzun Mesafe, 1.8km, Arduino-dan Arduino ilə HC-12 ilə Simsiz Əlaqə: 6 Addım (Şəkillərlə) Uzun Mesafe, 1.8km, Arduino-dan Arduino ilə HC-12 ilə Simsiz Əlaqə: 6 Addım (Şəkillərlə)](https://i.howwhatproduce.com/images/002/image-4099-27-j.webp)
Uzun məsafə, 1.8km, Arduino-dan Arduino-ya HC-12 ilə Simsiz Əlaqə: Bu təlimatda Arduinos arasında 1.8km-ə qədər açıq havada necə ünsiyyət qurmağı öyrənəcəksiniz. HC-12 simsiz serial portudur. çox faydalı, son dərəcə güclü və istifadəsi asan olan ünsiyyət modulu. Əvvəlcə sızlayacaqsınız
Arduino əsaslı layihələr üçün NRF24L01 ötürücü modulundan istifadə edərək simsiz əlaqə: 5 addım (şəkillərlə)
![Arduino əsaslı layihələr üçün NRF24L01 ötürücü modulundan istifadə edərək simsiz əlaqə: 5 addım (şəkillərlə) Arduino əsaslı layihələr üçün NRF24L01 ötürücü modulundan istifadə edərək simsiz əlaqə: 5 addım (şəkillərlə)](https://i.howwhatproduce.com/images/003/image-6694-21-j.webp)
Arduino Əsaslı Layihələr üçün NRF24L01 Alıcı-Verici Modulundan istifadə edərək Simsiz Əlaqə: Bu robotlar və mikro nəzarətçilər haqqında ikinci təlimatlı dərsliyimdir. Robotunuzun canlı olaraq işlədiyini və gözlənildiyi kimi işlədiyini görmək inanılmazdır və inanın ki, robotunuzu və ya digər şeyləri simsiz sürətlə idarə etsəniz daha əyləncəli olacaq
Şifrəli fayl hərəkəti: 7 addım
![Şifrəli fayl hərəkəti: 7 addım Şifrəli fayl hərəkəti: 7 addım](https://i.howwhatproduce.com/preview/how-to-implement/10454122-encrypted-file-movement-7-steps-0.webp)
Şifrəli Fayl Hərəkatı: Bir il əvvəl bir layihənin bir hissəsi idim. Ölkə daxilində bəzi həssas məlumatları köçürməliyik. Bunun səbəbini araşdıracağam, 1. addıma keçməkdən çəkinməyin. Arxa plan: Komandam qısa müddətdə bir kompüteri kompüterdən bərpa etmək üçün çağırıldı
Fayllarınızı Təhlükəsiz Etmək üçün Şifrəli Dvd Məlumatlarını Necə Edə bilərsiniz .: 8 Addım
![Fayllarınızı Təhlükəsiz Etmək üçün Şifrəli Dvd Məlumatlarını Necə Edə bilərsiniz .: 8 Addım Fayllarınızı Təhlükəsiz Etmək üçün Şifrəli Dvd Məlumatlarını Necə Edə bilərsiniz .: 8 Addım](https://i.howwhatproduce.com/images/002/image-3549-100-j.webp)
Fayllarınızı Təhlükəsiz Etmək üçün Şifrəli Dvd Məlumatlarını Necə Hazırlamaq olar: Şifrəli DVD -ni fayllarınızın təhlükəsizliyi üçün çox yaxşı etmək üçün çox asan bir üsul tapıram. ŞİFRELİ VİRTÜAL SÜRÜCÜ (EVD) etmək üçün PGP masaüstündən istifadə etdim. Qeyd: PGP masa üstü deyil Bir proqramı yüklədikdən sonra tech-piersrsr almaq üçün lazım olan bir pulsuz proqram