Orodha ya maudhui:
- Vifaa
- Hatua ya 1: 1. Sanidi Atecc608a
- Hatua ya 2: 2. Ubunifu wa Mzunguko (Mwalimu na Mtumwa)
- Hatua ya 3: 3. Kanuni (Mtumwa na Mwalimu)
- Hatua ya 4: 4. Nenda Zaidi
- Hatua ya 5: Hitimisho
Video: Mawasiliano yaliyosimbwa kwa njia isiyo na waya Arduino: Hatua 5
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:50
Halo kila mtu, Katika nakala hii ya pili, nitakuelezea jinsi ya kutumia chip Atecc608a kupata mawasiliano yako yasiyotumia waya. Kwa hili, nitatumia NRF24L01 + kwa sehemu isiyo na waya na Arduino UNO.
Chip ndogo ya ATECC608A imeundwa na MicroChip na imepata zana nyingi za usalama. Kwa mfano, chip hii inaweza kuhifadhi Funguo za ECC, Funguo za AES (kwa AES 128) na SHA2 Hash.
Nakala hiyo: NRF24L01 + Arduino UNO + ATECC608A
Wakati wa mawasiliano kati ya kitu mbili cha IoT, mashambulio kadhaa yanaweza kuwapo: Mtu wa upole, Nakala ya habari na zaidi.. Kwa hivyo wazo langu ni rahisi sana:
- Utumiaji wa data iliyosimbwa kwa njia fiche kati ya kitu cha IoT mbili au zaidi.
- Vifaa vya gharama nafuu
- Unaweza kufanya kazi na Arduino UNO
Kwa upande wangu, ninatumia
- Atecc608a kuhifadhi Kitufe changu cha AES na kusimba / kusimbua data yangu.
- Arduino Uno kama Mdhibiti Mdogo
- NRF24L01 kutuma data yangu
Unahitaji kufuata hatua hizo kwa mradi huu:
- Sanidi chip ATECC608A
- Fanya mzunguko (Node ya Mwalimu na Node ya Watumwa)
- Sehemu ya nambari
- Nenda zaidi !
Kwa hatua za kwanza "Weka chip ATECC608A", niliandika nakala nyingine inayoelezea kila hatua kwa mpangilio. Kiungo kiko hapa:
Sasa anza!
Vifaa
Kwa mradi huu unahitaji:
- 2 Arduino UNO au Arduino NANO au Arduino Mega
- Baadhi ya waya
- 2 Atecc608a (kila gharama chini ya $ 0.60)
- 2 NRF24L01 +
- 2 capacitor (10 μF)
- Mikate ya mkate
Unganisha na nakala yangu ambayo inaelezea jinsi ya kuanzisha chip ATECC608A -> Jinsi ya kuanzisha Atecc608a
Hatua ya 1: 1. Sanidi Atecc608a
Sitatoa maelezo kila hatua ya kufuata kuanzisha ATECC608A kwa sababu niliandika nakala kamili inayoelezea kila hatua ya kuifanya. Ili kuiweka, unahitaji kufuata "Hatua ya 4" ya nakala hii inayoitwa "2. Usanidi wa Chip (Atecc608a)"
Kiungo ni: Jinsi ya kuanzisha ATECC608A
Pia, unahitaji kuweka usanidi sawa kwa Atecc608a, upande mkuu na upande wa mtumwa, vinginevyo hautaweza kusimba data yako
Onyo:
Ili kuanzisha chip hii, unahitaji kufuata kila hatua ya kifungu hapo juu kwa utaratibu. Ikiwa hatua moja haipo au chip haijafungwa, haungeweza kufanya mradi huu
Zilizosalia:
Hatua ya kufuata kwa hii:
- Unda kiolezo cha usanidi
- Andika templeti hii kwa chip
- Funga eneo la Usanidi
- Andika ufunguo wako wa AES (128 Bits) kwenye slot
- Funga eneo la Takwimu
Hatua ya 2: 2. Ubunifu wa Mzunguko (Mwalimu na Mtumwa)
Katika mradi huu, utakuwa na Node ya Mwalimu na Node ya Watumwa.
Node kuu itachapisha data iliyotumwa na node ya mtumwa wazi. Itahitaji data kutoka kwa node ya watumwa kila mara X.
Node ya watumwa itasikiliza "mtandao" na wakati itapokea "Omba data", itaizalisha, kuisimba na kuipeleka kwa nodi kuu.
Kwa pande zote mbili, bwana na mtumwa mzunguko ni sawa:
- Nano mmoja arduino
- ATECC608A moja
- NRF24L01 moja
Niliunganisha mzunguko kwa hatua hii (tazama picha hapo juu).
Kwa ATECC608A kwa Arduino UNO, hii ni pini 8 ya kupendeza. Niliongeza "mwonekano wa juu" hapo juu:
- ARDUINO 3.3V -> PIN 8 (Atecc608a)
- ARDUINO GND -> PIN 4 (Atecc608a)
- ARDUINO A4 (SDL) -> PIN 5 (Atecc608a)
- ARDUINO A5 (SCL) -> PIN 6 (Atecc608a)
Kwa NRF24L01 kwa 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) -> tu kwa nodi ya Utumwa, haitumiwi katika hali ya Master
Kwa nini utumie pini ya IRQ ya NRF24L01
Pini ya IRQ ni muhimu sana, pini hii inaruhusu kusema (LOW) wakati pakiti inapopokelewa na NRF24L01, kwa hivyo tunaweza kushikamana na Kukatiza kwa pini hii kuamsha node ya mtumwa.
Hatua ya 3: 3. Kanuni (Mtumwa na Mwalimu)
Node ya Mtumwa
Ninatumia kuokoa nguvu kwa Node ya mtumwa kwa sababu haiitaji kusikiliza kila wakati.
Jinsi inavyofanya kazi: node ya mtumwa sikiliza na subiri kupokea "pakiti ya AMKA". Pakiti hii hutumwa na node ya Mwalimu kuuliza data kutoka kwa mtumwa.
Katika kesi yangu mimi hutumia safu ya mbili int:
// Pakiti ya UP
const int wake_packet [2] = {20, 02};
Ikiwa nodi yangu inapokea pakiti,
- amka, soma pakiti hii, ikiwa pakiti ni "Amka"
- hutoa data,
- ficha data,
- tuma data kwa bwana, subiri pakiti ya ACK,
- lala.
Kwa Usimbuaji wa AES, ninatumia ufunguo katika nambari ya yanayopangwa 9.
Hii ndio nambari yangu ya nodi ya Mtumwa
# pamoja na "Arduino.h" # pamoja na "avr / sleep.h" # pamoja na "avr / wdt.h"
# pamoja na "SPI.h"
# pamoja na "nRF24L01.h" # pamoja na "RF24.h"
# pamoja na "Wire.h"
// Maktaba ya ATECC608A
# pamoja na "ATECCX08A_Arduino / cryptoauthlib.h" # pamoja na "AES BASIC / aes_basic.h"
#fafanua ID_NODE 255
#fafanua AES_KEY (uint8_t) 9
ATCAIfaceCfg cfg;
Hadhi ya ATCA_STATUS;
Redio ya RF24 (9, 10);
const uint64_t masteraddresse = 0x1111111111;
const uint64_t slaveaddresse = 0x1111111100;
/**
Kazi fupi iliyotekelezwa wakati usumbufu umewekwa (IRQ LOW) * * * / utupu wakeUpIRQ () {wakati (redio haipatikani ()) {int data [32]; redio.soma (& data, 32); ikiwa (data [0] == 20 && data [1] == 02) {float temp = 17.6; kuelea hum = 16.4;
data ya uint8_t [16];
uint8_t cypherdata [16];
// Jenga Kamba ili kuweka Thamani yangu yote
// Kila thamani imetengwa na "|" na "$" inamaanisha mwisho wa data // ONYO: Lazima iwe chini ya urefu wa 11 Kamba tmp_str_data = Kamba (ID_NODE) + "|" + Kamba (temp, 1) + "|" + Kamba (hum, 1) + "$"; // saizi ya 11 Serial.println ("tmp_str_data:" + tmp_str_data);
tmp_str_data.getBytes (data, sizeof (data));
// Encrypt data
Hali ya ATCA_STATUS = aes_basic_encrypt (& cfg, data, sizeof (data), cypherdata, AES_KEY); ikiwa (status == ATCA_SUCCESS) {rand ndefu = random ((ndefu) 10000, (ndefu) 99999);
// tengeneza UUID kulingana na nambari tatu ya kwanza = node ya kitambulisho
Kamba uuid = Kamba (ID_NODE) + Kamba (rand); // Ukubwa wa 8
uint8_t tmp_uuid [8];
data_ya_kutuma [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)); // Acha kusikiliza redio. Acha Kusikiliza ();
rslt ya bool;
// Tuma Takwimu rslt = radio.write (& data_to_send, sizeof (data_to_send)); // Anza kusikiliza redio. Anza Kusikiliza (); ikiwa (rslt) {// Mwisho na hali ya kulala Serial.println (F ("Imefanywa")); }}}}}
kuanzisha batili ()
{Serial.begin (9600);
// Init kondakta wa maktaba
cfg.iface_type = ATCA_I2C_IFACE; // Aina ya mawasiliano -> I2C mode cfg.devtype = ATECC608A; // Aina ya chip cfg.atcai2c.slave_address = 0XC0; // I2C addresse (thamani chaguo-msingi) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_chelewesha = 1500; // Kuchelewa kwa kuamka (1500 ms) cfg.rx_retries = 20;
redio.anza ();
redio.setDataRate (RF24_250KBPS); redio.maskIRQ (1, 1, 0); radio.enableAckPayload (); seti ya redio. Reti (5, 5);
radio.openWritingPipe (masteraddresse);
radio.openReadingPipe (1, slaveaddresse); // Ambatisha kukatiza kwa pini 3 // Rekebisha 1 na O ikiwa unataka kukatiza kwa pini 2 // KUANGUKA MODE = Piga kwa kiambatisho CHINI (1, wakeUpIRQ, FALLING); }
kitanzi batili ()
{ // Hakuna haja }
Node ya Mwalimu
Node kuu huamka kila sekunde 8 kuuliza data kutoka kwa Node ya mtumwa
Jinsi inavyofanya kazi: Node kuu hutuma pakiti ya "WakeUP" kwa mtumwa na baada ya kusubiri jibu la mtumwa na data.
Katika kesi yangu mimi hutumia safu ya mbili int:
// Pakiti ya UP
const int wake_packet [2] = {20, 02};
Ikiwa node ya mtumwa hutuma pakiti ya ACK baada ya bwana kutuma pakiti ya WakeUp:
- Mwalimu ameweka katika hali ya Usikilize na subiri mawasiliano
- Ikiwa mawasiliano
- Toa baiti 8 ya kwanza, pakua kaiti tatu za kwanza za ka 8, ikiwa hii ndio node ya kitambulisho
- Toa baiti 16 ya cypher
- Ficha data
- Chapisha data katika Serial
- Hali ya kulala
Kwa Usimbuaji wa AES, ninatumia ufunguo katika nambari ya yanayopangwa 9.
Hii ndio nambari yangu ya nodi ya Mwalimu
# pamoja na "Arduino.h"
# pamoja na "avr / sleep.h" # pamoja na "avr / wdt.h" # pamoja na "SPI.h" #jumuisha "nRF24L01.h" # pamoja na "RF24.h" # pamoja na "Wire.h" // ATECC608A maktaba # pamoja na "ATECCX08A_Arduino / cryptoauthlib.h" # pamoja na "AES BASIC / aes_basic.h" #fafanua ID_NODE 255 #fafanua AES_KEY (uint8_t) 9 ATCAIfaceCfg cfg; Hadhi ya ATCA_STATUS; Redio ya RF24 (9, 10); const uint64_t masteraddresse = 0x1111111111; const uint64_t slaveaddresse = 0x1111111100; // pakiti ya kuamka const int wake_packet [2] = {20, 02}; // mbwa anayetazama hukatiza ISR (WDT_vect) {wdt_disable (); // afya ya mwangalizi} batili njia ya kulala () {// afya ADC ADCSRA = 0; // futa bendera anuwai za "kuweka upya" MCUSR = 0; // kuruhusu mabadiliko, afya WDTCSR = kidogo (WDCE) | kidogo (WDE); // kuweka hali ya kukatiza na muda WDTCSR = kidogo (WDIE) | kidogo (WDP3) | kidogo (WDP0); // weka WDIE, na sekunde 8 kuchelewesha wdt_reset (); // weka upya njia ya kutazama set_sleep_mode (SLEEP_MODE_PWR_DOWN); hakunaKukatizwa (); // mlolongo uliowekwa kwa wakati unafuata usingizi_owezeshwa (); // zima rangi ya hudhurungi - wezesha programu MCUCR = kidogo (BODS) | kidogo (BODSE); MCUCR = kidogo (BODS); huingilia (); // inahakikishia maagizo yafuatayo yaliyotekelezwa sleep_cpu (); // kufuta usingizi kama tahadhari sleep_disable (); } usanidi batili () {Serial.begin (9600); // Init kondakta wa maktaba cfg.iface_type = ATCA_I2C_IFACE; // Aina ya mawasiliano -> I2C mode cfg.devtype = ATECC608A; // Aina ya chip cfg.atcai2c.slave_address = 0XC0; // I2C addresse (thamani chaguo-msingi) cfg.atcai2c.bus = 1; cfg.atcai2c.baud = 100000; cfg.wake_chelewesha = 1500; // Kuchelewa kwa kuamka (1500 ms) cfg.rx_retries = 20; redio.anza (); redio.setDataRate (RF24_250KBPS); redio.maskIRQ (1, 1, 0); radio.enableAckPayload (); seti ya redio. Reti (5, 5); radio.openWritingPipe (slaveaddresse); radio.openReadingPipe (1, masteraddresse); } kitanzi batili () {bool rslt; // Tuma Takwimu rslt = radio.write (& wake_packet, sizeof (wake_packet)); ikiwa (rslt) {// Anza kusikiliza redio. anza Kusikiliza (); wakati (redio haipatikani ()) {uint8_kujibu [32]; redio.soma (& jibu, saizi ya (jibu)); uint8_t node_id [3]; uint8_t cypher [16]; memcpy (node_id, jibu, 3); memcpy (cypher, jibu + 3, 16); ikiwa ((int) node_id == ID_NODE) {uint8_t pato [16]; Hali ya ATCA_STATUS = aes_basic_decrypt (& cfg, cypher, 16, pato, AES_KEY); ikiwa (status == ATCA_SUCCESS) {Serial.println ("Imesimbwa Takwimu:"); kwa (size_t i = 0; i <16; i ++) {Serial.print ((char) pato ); }}}}}} mwingine {Serial.println ("Ack not kupokea kwa Wakup Packet"); } // Njia ya kulala 8 sekunde za kulala (); }
Ikiwa una swali, niko hapa kujibu
Hatua ya 4: 4. Nenda Zaidi
Mfano huu ni rahisi ili uweze kuboresha mradi huu
Maboresho:
- AES 128 ni ya msingi na unaweza kutumia algorithm nyingine ya AES kama AES CBC kuwa salama.
- Badilisha moduli isiyo na waya (NRF24L01 imepunguzwa na mzigo wa baiti 23)
- …
Ukiona uboreshaji wa kufanya, ueleze kwenye eneo la majadiliano
Hatua ya 5: Hitimisho
Natumaini nakala hii itakuwa muhimu kwako. Samahani ikiwa nilikosea katika maandishi yangu lakini Kiingereza sio lugha yangu kuu na ninazungumza vizuri kuliko ninavyoandika.
Asante kwa kusoma kila kitu.
Furahia.
Ilipendekeza:
Nguvu isiyo na waya isiyo na waya kutoka kwa NYWELE: Hatua 4 (na Picha)
Nguvu isiyokuwa na waya isiyo na waya kutoka kwa NYWELE: Leo ningependa kushiriki jinsi ya kuwasha taa za umeme kwa njia ya umeme bila waya kutoka kwa chaja ya mswaki na koili za vali za solenoid ambazo zilichukuliwa kutoka kwa scrapyard. Kabla ya kuanza, tafadhali angalia video hapa chini:
Kutumia Nodemcu kwa njia isiyo na waya ya Mlango: Njia 9 (na Picha)
Wireless RFID Door Lock Kutumia Nodemcu: --- Kazi kuu - Mradi huu ulijengwa kama sehemu ya darasa la Mawasiliano ya Mtandao huko Universidade do Algarve kwa kushirikiana na mwenzangu Lu í s Santos. Kusudi lake kuu ni kudhibiti ufikiaji wa kufuli kwa umeme kupitia waya isiyotumia waya
Nguvu isiyo na waya isiyo na waya: Hatua 9 (na Picha)
Nguvu isiyo na waya ya kiwango cha juu: Jenga mfumo wa Usambazaji wa Nguvu isiyo na waya ambao unaweza kuwasha balbu ya taa au kuchaji simu kutoka hadi futi 2 mbali! Hii hutumia mfumo wa coil resonant kupeleka uwanja wa sumaku kutoka kwa coil inayopitisha hadi kwenye coil inayopokea. Tulitumia hii kama onyesho wakati wa
Hack Bodi isiyo na waya katika Kubadilisha Alarm isiyo na waya au Zima / Zima: 4 Hatua
Bofya Kengele isiyo na waya katika Kubadilisha Alarm isiyo na waya au Zima / Zima: Hivi majuzi niliunda mfumo wa kengele na kuiweka ndani ya nyumba yangu. Nilitumia swichi za sumaku kwenye milango na kuzitia ngumu kwenye dari. Madirisha yalikuwa hadithi nyingine na wiring ngumu kwao haikuwa chaguo. Nilihitaji suluhisho la wireless na hii ni
Badilisha Router isiyo na waya kwa Njia ya Ufikiaji isiyo na waya 2x: Hatua 5
Badilisha Njia isiyo na waya iingie kwa Wireless Extender 2x Access Point: Nilikuwa na muunganisho duni wa wavuti ndani ya nyumba yangu kwa sababu ya RSJ (boriti ya msaada wa chuma kwenye dari) na nilitaka kuongeza ishara au kuongeza nyongeza ya ziada kwa nyumba yote. Nilikuwa nimeona viongezeo vya karibu na pauni; 50 katika electro