![Сымсыз шифрланған байланыс Arduino: 5 қадам Сымсыз шифрланған байланыс Arduino: 5 қадам](https://i.howwhatproduce.com/images/006/image-17809-j.webp)
Мазмұны:
2025 Автор: John Day | [email protected]. Соңғы өзгертілген: 2025-01-23 14:51
![Arduino сымсыз шифрланған байланыс Arduino сымсыз шифрланған байланыс](https://i.howwhatproduce.com/images/006/image-17809-1-j.webp)
Барлығына сәлем, Бұл екінші мақалада мен сізге сымсыз байланыс қауіпсіздігі үшін Atecc608a чипін қалай пайдалану керектігін түсіндіремін. Ол үшін мен NRF24L01+ сымсыз бөлігі мен Arduino UNO үшін қолданамын.
ATECC608A микро чипі MicroChip -пен жасалған және көптеген қауіпсіздік құралдарына ие. Мысалы, бұл чип ECC кілттерін, AES кілттерін (AES 128 үшін) және SHA2 Hash сақтай алады.
Мақала: NRF24L01 + Arduino UNO + ATECC608A
Екі IoT объектісі арасындағы байланыс кезінде бірнеше шабуылдар болуы мүмкін: қарапайым адам, ақпарат көшірмесі және тағы басқалар.. Сондықтан менің ойым өте қарапайым:
- Екі немесе одан да көп IoT объектілері арасында шифрланған деректерді қолдану.
- Бағасы төмен жабдықтар
- Arduino UNO -мен жұмыс жасай алады
Менің жағдайда, мен қолданамын
- Atecc608a менің AES кілтімді сақтауға және деректерді шифрлауға/шифрды ашуға арналған.
- Arduino Uno микроконтроллер ретінде
- Менің деректерімді жіберу үшін NRF24L01
Бұл жоба үшін келесі қадамдарды орындау қажет:
- ATECC608A чипін орнатыңыз
- Тізбекті жасаңыз (негізгі түйін мен құлдық түйін)
- Код бөлігі
- Әрі қарай жүр!
«ATECC608A чипін орнату» алғашқы қадамдары үшін мен әр қадамды ретімен түсіндіретін басқа мақала жаздым. Сілтеме мына жерде:
Енді бастаңыз!
Жабдықтар
Бұл жоба үшін сізге қажет:
- 2 Arduino UNO немесе Arduino NANO немесе Arduino Mega
- Кейбір сымдар
- 2 Atecc608a (әрқайсысының бағасы 0,60 доллардан төмен)
- 2 NRF24L01+
- 2 конденсатор (10 мкФ)
- Нан тақталары
ATECC608A -> Atecc608a чипін қалай орнату керектігін түсіндіретін менің мақалама сілтеме.
1 -қадам: 1. Atecc608a орнатыңыз
![1. Atecc608a орнатыңыз 1. Atecc608a орнатыңыз](https://i.howwhatproduce.com/images/006/image-17809-2-j.webp)
![1. Atecc608a орнатыңыз 1. Atecc608a орнатыңыз](https://i.howwhatproduce.com/images/006/image-17809-3-j.webp)
Мен ATECC608A орнату үшін әр қадамды егжей -тегжейлі айтпаймын, себебі мен оның барлық қадамдарын түсіндіретін толық мақала жаздым. Оны орнату үшін осы мақаланың «2. Чиптің конфигурациясы (Atecc608a)» деп аталатын «4 -қадамын» орындау керек.
Сілтеме: ATECC608A қалай орнатылады
Сондай -ақ, Atecc608a, негізгі және қосалқы жақтар үшін бірдей конфигурацияны қою қажет, әйтпесе сіз деректердің шифрын шеше алмайсыз
Ескерту:
Бұл чипті орнату үшін жоғарыдағы мақаланың әр қадамын ретімен орындау қажет. Егер бір қадам жоқ болса немесе чип бекітілмесе, сіз бұл жобаны жасай алмайсыз
Қалған:
Бұл үшін келесі қадамдарды орындаңыз:
- Конфигурация үлгісін жасаңыз
- Бұл үлгіні чипке жазыңыз
- Конфигурация аймағын құлыптаңыз
- AES кілтін (128 бит) ұяшыққа жазыңыз
- Деректер аймағын құлыптаңыз
2 -қадам: 2. Схеманың дизайны (шебер мен құл)
![2. Схеманың дизайны (шебер мен құл) 2. Схеманың дизайны (шебер мен құл)](https://i.howwhatproduce.com/images/006/image-17809-4-j.webp)
![2. Схеманың дизайны (шебер мен құл) 2. Схеманың дизайны (шебер мен құл)](https://i.howwhatproduce.com/images/006/image-17809-5-j.webp)
Бұл жобада сізде негізгі түйін мен құлдық түйін болады.
Негізгі түйін қосалқы түйін жіберетін деректерді анық басып шығарады. Ол X түйінінен деректерді әр X рет сұрайды.
Қосалқы түйін «желіні» тыңдайды және «Деректерді сұрауды» алған кезде оны жасайды, шифрлайды және оны негізгі түйінге жібереді.
Екі жақ үшін де тізбек басты және құл бірдей:
- Бір нано нано
- Бір ATECC608A
- Бір NRF24L01
Мен схеманы осы қадамға қостым (жоғарыдағы суретті қараңыз).
ATECC608A Arduino UNO үшін бұл 8 істікші. Мен жоғарыдан «жоғарғы көріністі» қостым:
- ARDUINO 3.3V -> PIN 8 (Atecc608a)
- ARDUINO GND -> PIN 4 (Atecc608a)
- ARDUINO A4 (SDL) -> PIN 5 (Atecc608a)
- ARDUINO A5 (SCL) -> PIN 6 (Atecc608a)
NRF24L01 Arduino үшін:
- 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) -> тек қосалқы түйін үшін, негізгі режимде қолданылмайды
NRF24L01 IRQ түйреуішін не үшін қолдану керек
IRQ түйрегіші өте пайдалы, бұл түйін NRF24L01 пакетін алған кезде (LOW) деп айтуға мүмкіндік береді, осылайша біз түйінді ояту үшін осы түйреуішке үзіліс тіркей аламыз.
3 -қадам: 3. Кодекс (Құл мен Мастер)
![3. Кодекс (Құл мен Мастер) 3. Кодекс (Құл мен Мастер)](https://i.howwhatproduce.com/images/006/image-17809-6-j.webp)
Құлдық түйін
Мен құлдық түйін үшін үнемдеуді қолданамын, себебі ол үнемі тыңдауды қажет етпейді.
Бұл қалай жұмыс істейді: қосалқы түйін тыңдайды және «Wake UP пакетін» алуды күтеді. Бұл пакетті негізгі түйін жіберушіден деректерді сұрау үшін жібереді.
Менің жағдайда мен екі int массивін қолданамын:
// Ояту пакеті
const int wake_packet [2] = {20, 02};
Егер менің түйінім пакетті алса,
- ол оянады, бұл пакетті оқыңыз, егер пакет «Оян» болса,
- ол деректерді қалыптастырады,
- мәліметтерді шифрлау,
- деректерді шеберге жіберіңіз, ACK пакетін күтіңіз,
- ұйықтау
AES шифрлау үшін мен 9 ұяшықтағы кілтті қолданамын.
Бұл менің құлдық түйінге арналған кодым
#«Arduino.h» қосу #«avr/sleep.h» қосу « #avr/wdt.h» қосу
#«SPI.h» қосыңыз
#қосу «nRF24L01.h» #қосу «RF24.h»
#«Wire.h» қосыңыз
// ATECC608A кітапханасы
#«ATECCX08A_Arduino/cryptoauthlib.h» қосу #«AES BASIC/aes_basic.h» қосу
255
AES_KEY (uint8_t) анықтаңыз 9
ATCAIfaceCfg cfg;
ATCA_STATUS күйі;
RF24 радиосы (9, 10);
const uint64_t masteraddresse = 0x1111111111;
const uint64_t slaveaddresse = 0x1111111100;
/**
* / қысқаша үзіліс орнатылған кезде орындалатын функция (IRQ LOW) * * */ void wakeUpIRQ () {while (radio.available ()) {int data [32]; radio.read (& деректер, 32); if (data [0] == 20 && data [1] == 02) {float temp = 17.6; float hum = 16,4;
uint8_t деректері [16];
uint8_t шифрлық деректер [16];
// Менің барлық мәнімді орнату үшін жол құрыңыз
// Әр мән «|» белгісімен бөлінеді және «$» - деректердің аяқталуын білдіреді // ЕСКЕРТУ: 11 ұзындығынан аз болуы керек String tmp_str_data = String (ID_NODE) + «|» + Жол (темп, 1) + «|» + Жол (хум, 1) + «$»; // өлшемі 11 Serial.println («tmp_str_data:» + tmp_str_data);
tmp_str_data.getBytes (деректер, өлшемі (деректер));
// Деректерді шифрлау
ATCA_STATUS күйі = aes_basic_encrypt (& cfg, деректер, өлшемдер (деректер), шифрлар, AES_KEY); if (status == ATCA_SUCCESS) {long rand = random ((long) 10000, (long) 99999);
// үш бірінші санға негізделген UUID жасаңыз = ID түйіні
String uuid = Жол (ID_NODE) + Жол (rand); // 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 тыңдауды тоқтату ();
bool rslt;
// Деректерді жіберу rslt = radio.write (& data_to_send, sizeof (data_to_send)); // Радио тыңдауды бастау.startListening (); if (rslt) {// Аяқтау және ұйқы режимі Serial.println (F («Орындалды»)); }}}}}
жарамсыз орнату ()
{Serial.begin (9600);
// Кітапхана үшін конструкторды іске қосыңыз
cfg.iface_type = ATCA_I2C_IFACE; // Байланыс түрі -> I2C режимі cfg.devtype = ATECC608A; // Чип түрі cfg.atcai2c.slave_address = 0XC0; // I2C addresse (әдепкі мән) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Оянудың кешігуі (1500 мс) cfg.rx_retries = 20;
radio.begin ();
radio.setDataRate (RF24_250KBPS); radio.maskIRQ (1, 1, 0); radio.enableAckPayload (); radio.setRetries (5, 5);
radio.openWritingPipe (masteraddresse);
radio.openReadingPipe (1, slaveaddresse); // Үзілісті 3 түйреуішке тіркеңіз // Егер үзілісті 2 түйреуішке үзгіңіз келсе, O арқылы 1 -ді өзгертіңіз // FALLING MODE = Pin LOW attachInterrupt (1, wakeUpIRQ, FALLING); }
бос цикл ()
{ // Қажеті жоқ }
Негізгі түйін
Негізгі түйін әр 8 секунд сайын оянады және түйіннен деректерді сұрайды
Бұл қалай жұмыс істейді: Негізгі түйін құлға «WakeUP» пакетін жібереді және күткеннен кейін жауап беруші деректермен жауап береді.
Менің жағдайда мен екі int массивін қолданамын:
// Ояту пакеті
const int wake_packet [2] = {20, 02};
Егер негізгі түйін WakeUp пакетін жібергеннен кейін, қосалқы түйін ACK пакетін жіберсе:
- Мастер тыңдау режимінде орнатылды және байланысты күтіңіз
- Егер байланыс
- Алғашқы 8 байтты шығарыңыз, 8 байттың үш бірінші байтын тонаңыз, егер бұл идентификатор түйіні болса
- 16 байт шифрды шығарыңыз
- Деректердің шифрын шешіңіз
- Деректерді сериялық түрде басып шығарыңыз
- Ұйқы режимі
AES шифрлау үшін мен 9 ұяшықтағы кілтті қолданамын.
Бұл менің негізгі түйінге арналған кодым
#«Arduino.h» қосыңыз
#include «avr/sleep.h» #include «avr/wdt.h» #include «SPI.h» #include «nRF24L01.h» #include «RF24.h» #include «Wire.h» // ATECC608A кітапханасы #include «ATECCX08A_Arduino/cryptoauthlib.h» #include «AES BASIC/aes_basic.h» #define ID_NODE 255 #deesine AES_KEY (uint8_t) 9 ATCAIfaceCfg cfg; ATCA_STATUS күйі; RF24 радиосы (9, 10); const uint64_t masteraddresse = 0x1111111111; const uint64_t slaveaddresse = 0x1111111100; // Wake UP пакеті const int wake_packet [2] = {20, 02}; // қарауылдың үзілуі ISR (WDT_vect) {wdt_disable (); // watchdog өшіру} void sleepmode () {// ADC ADCSRA өшіру = 0; // әр түрлі «ысыру» жалаушаларын тазарту MCUSR = 0; // өзгерістерге рұқсат ету, WDTCSR = бит (WDCE) қалпына келтіруді өшіру | бит (WDE); // үзіліс режимі мен аралықты орнатыңыз WDTCSR = бит (WDIE) | бит (WDP3) | бит (WDP0); // орнату WDIE, және 8 секундқа кешіктіру wdt_reset (); // күзетші set_sleep_mode (SLEEP_MODE_PWR_DOWN) қалпына келтіру; noInterrupts (); // уақыттық реттілік sleep_enable () бойынша жүреді; // MCUCR = bit (BODS) бағдарламалық жасақтамасында қоңыр түсіруді өшіру | бит (BODSE); MCUCR = бит (BODS); үзулер (); // келесі нұсқаулықтың орындалуына кепілдік береді sleep_cpu (); // сақтық шарасы ретінде ұйқыны болдырмау sleep_disable (); } void setup () {Serial.begin (9600); // cfg.iface_type = ATCA_I2C_IFACE кітапханасының конструкторын іске қосыңыз; // Байланыс түрі -> I2C режимі cfg.devtype = ATECC608A; // Чип түрі cfg.atcai2c.slave_address = 0XC0; // I2C addresse (әдепкі мән) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_delay = 1500; // Оянудың кешігуі (1500 мс) 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; // Деректерді жіберу rslt = radio.write (& wake_packet, sizeof (wake_packet)); if (rslt) {// Start Listening Radio.startListening (); while (radio.available ()) {uint8_t жауап [32]; radio.read (& answer, sizeof (answer)); uint8_t node_id [3]; uint8_t шифр [16]; memcpy (node_id, жауап, 3); memcpy (шифр, жауап + 3, 16); if ((int) node_id == ID_NODE) {uint8_t шығару [16]; ATCA_STATUS күйі = aes_basic_decrypt (& cfg, шифр, 16, шығару, AES_KEY); if (status == ATCA_SUCCESS) {Serial.println («Шифрланған деректер:»); for (size_t i = 0; i <16; i ++) {Serial.print ((char) шығысы ); }}}}} else {Serial.println («Ояну пакеті қабылданбайды»); } // Ұйқы режимі 8 секунд ұйқы режимі (); }
Егер сізде сұрақтар болса, мен жауап беруге келдім
4 -қадам: 4. Әрі қарай жүріңіз
Бұл мысал қарапайым, сондықтан сіз бұл жобаны жақсарта аласыз
Жақсартулар:
- AES 128 негізгі болып табылады және қауіпсіз болу үшін AES басқа алгоритмін AES CBC ретінде пайдалануға болады.
- Сымсыз модульді өзгертіңіз (NRF24L01 23 байт жүктемемен шектелген)
- …
Егер сіз жақсартуды байқасаңыз, оны талқылау аймағында түсіндіріңіз
5 -қадам: Қорытынды
Бұл мақала сіз үшін пайдалы болады деп сенемін. Кешіріңіз, егер мен мәтіннен қателескен болсам, бірақ ағылшын тілі менің негізгі тілім емес, мен жазғаннан гөрі жақсы сөйлеймін.
Барлығын оқығаныңыз үшін рахмет.
Ләззат ал.
Ұсынылған:
LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам
![LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам LoRa E32 (sx1278/sx1276) Arduino, Esp8266 немесе Esp32 құрылғысына арналған 3км -ден 8км сымсыз байланыс: 15 қадам](https://i.howwhatproduce.com/images/001/image-540-15-j.webp)
LoRa Arduino, Esp8266 немесе Esp32 үшін 3Km -ден 8Km дейін сымсыз байланыс E32 (sx1278/sx1276) құрылғысы: Мен LoBa құрылғысының Semtech сериясына негізделген EBYTE E32 басқару үшін кітапхана құрамын, өте қуатты, қарапайым және арзан құрылғы. Мұнда 3Km нұсқасы, мұнда 8Km нұсқасы Олар 3000 м -ден 8000 м -ге дейінгі қашықтықта жұмыс жасай алады және олардың көптеген мүмкіндіктері бар
Ұзақ диапазон, 1,8 км, Arduino-Arduino сымсыз байланыс HC-12: 6 қадам (суреттермен)
![Ұзақ диапазон, 1,8 км, Arduino-Arduino сымсыз байланыс HC-12: 6 қадам (суреттермен) Ұзақ диапазон, 1,8 км, Arduino-Arduino сымсыз байланыс HC-12: 6 қадам (суреттермен)](https://i.howwhatproduce.com/images/002/image-4099-27-j.webp)
Ұзақ диапазон, 1.8 км, Arduino-ден Arduino-ға HC-12 арқылы сымсыз байланыс. Бұл нұсқаулықта сіз Arduino арасында ашық ауада 1,8 км-ге дейінгі қашықтықта қалай сөйлесуді үйренесіз. HC-12-бұл сымсыз сериялық порт. байланыс модулі өте пайдалы, өте қуатты және қолдануға оңай. Алдымен сіз
Arduino негізіндегі жобалар үшін NRF24L01 трансивер модулін қолданатын сымсыз байланыс: 5 қадам (суреттермен)
![Arduino негізіндегі жобалар үшін NRF24L01 трансивер модулін қолданатын сымсыз байланыс: 5 қадам (суреттермен) Arduino негізіндегі жобалар үшін NRF24L01 трансивер модулін қолданатын сымсыз байланыс: 5 қадам (суреттермен)](https://i.howwhatproduce.com/images/003/image-6694-21-j.webp)
Arduino негізіндегі жобалар үшін NRF24L01 трансивер модулін қолданатын сымсыз байланыс: Бұл менің роботтар мен микроконтроллерлер туралы екінші нұсқаулық. Сіздің роботыңыздың тірі және күтілгендей жұмыс істеп тұрғанын көру өте керемет, ал егер сіз роботты немесе басқа заттарды сымсыз жылдамдықпен басқарсаңыз, одан да қызықты болады деп ойлаймын
Қуатты аз тұтыну дәуірінде сымсыз байланыс модульдерінің тұтынылатын энергиясын қалай дұрыс өлшеуге болады ?: 6 қадам
![Қуатты аз тұтыну дәуірінде сымсыз байланыс модульдерінің тұтынылатын энергиясын қалай дұрыс өлшеуге болады ?: 6 қадам Қуатты аз тұтыну дәуірінде сымсыз байланыс модульдерінің тұтынылатын энергиясын қалай дұрыс өлшеуге болады ?: 6 қадам](https://i.howwhatproduce.com/images/003/image-8287-10-j.webp)
Қуатты аз тұтыну дәуірінде сымсыз байланыс модульдерінің энергия шығынын қалай дұрыс өлшеуге болады ?: Қуаттың аз тұтынылуы - заттар Интернетінде өте маңызды ұғым. IoT түйіндерінің көпшілігі батареямен жұмыс істеуі керек. Тек сымсыз модульдің тұтынылатын қуатын дұрыс өлшеу арқылы біз батареяның қанша екенін дәл бағалай аламыз
NRF24L01 Arduino арасындағы сымсыз байланыс: 10 қадам
![NRF24L01 Arduino арасындағы сымсыз байланыс: 10 қадам NRF24L01 Arduino арасындағы сымсыз байланыс: 10 қадам](https://i.howwhatproduce.com/images/002/image-3818-50-j.webp)
NRF24L01 Arduino арасындағы сымсыз байланыс: NRF24L01 - бұл скандинавиялық жартылай өткізгіштердің 2,4 ГГц төмен қуатты сымсыз модулі. Ол 250 Кбит / с -тан 2 Мбит / с дейінгі жылдамдықпен жұмыс жасай алады. Егер ол жылдамдығы төмен ашық кеңістікте жұмыс жасаса, ол 300 футқа дейін жетуі мүмкін. Сондықтан ол қысқаша қолданылады