Orodha ya maudhui:

MFUASI WA CLOUD Na AWS & ARDUINO - Kijana wa Umeme: Hatua 6
MFUASI WA CLOUD Na AWS & ARDUINO - Kijana wa Umeme: Hatua 6

Video: MFUASI WA CLOUD Na AWS & ARDUINO - Kijana wa Umeme: Hatua 6

Video: MFUASI WA CLOUD Na AWS & ARDUINO - Kijana wa Umeme: Hatua 6
Video: CS50 2015 – 10-я неделя 2024, Novemba
Anonim
MFUASI WA CLOUD Na AWS & ARDUINO - Kijana wa Umeme
MFUASI WA CLOUD Na AWS & ARDUINO - Kijana wa Umeme

Ni mradi rahisi - washa taa wakati kitu kinakwenda sawa… Kuzidi kufa ganzi kuelekea arifa na dashibodi nyingi kwenye kompyuta zetu siku hizi, tunawezaje kuhakikisha kuwa hatukosi zile muhimu sana. Jibu ni kiashiria cha hali ya mwili. Au maalum zaidi kwa kazi hiyo, Cloud Monitor, ambayo inaweza kukaa kwenye dawati lako - ikionekana kila wakati. Kama jina linapendekeza, mfuatiliaji atasaidia kutazama afya ya huduma zako za wingu (… au kitu kingine chochote kweli, anga ni kikomo, samahani pun). Hata wewe, kama mimi, unahitaji kutengeneza moja? Hata kama sivyo, unaweza kuwa na wazo la mradi wako wa IoT wa baadaye.

Kweli, ikiwa uko tayari, wacha tuanze!

Hatua ya 1: Vipengele, Ugavi, Zana zinahitajika, Programu na Huduma ya Mkondoni

VIFAA NA VIFAA

_ Arduino Micro na Genuino Micro (kitengo 1)… au kitu chochote kidogo cha Arduino kinatumika - kwa upande wangu LeoStick ya freetronics (https://www.freetronics.com.au/collections/arduino/products/leostick)

_ ThingM BlinkM - I2C Iliyodhibitiwa RGB LED (kitengo 1)

_ Mwangaza mdogo wa wingu (kitengo 1)… au chombo kingine chochote chenye kupendeza unachotaka

Cable ya USB-A hadi B (kitengo 1)… au kebo yoyote ya zamani ya USB iliyo na kuziba aina-A

VITUO VINAHITAJIKA

_ Kuchochea chuma (generic)

APPS & HUDUMA YA MTANDAONI

_ Huduma za Wavuti za Amazon AWS Lambda (https://aws.amazon.com/it/lambda/)

_ Huduma za Wavuti za Amazon AWS IoT (https://aws.amazon.com/it/iot/)

Hatua ya 2: Vifaa

Vifaa
Vifaa
Vifaa
Vifaa

Taa ya usiku tayari inakuja na LED iliyojengwa - nyeupe nyeupe kwangu. Nilidhani itakuwa nzuri kuonyesha hali tofauti na rangi tofauti. Kwa hivyo niliweka tu wingu lenye umbo la wingu. Kwa akili za operesheni hiyo nilichagua ile inayofanana kabisa ya Arduino ambayo nilikuwa nayo: Freetronics LeoStick imekuwa jukwaa langu la kupigia mfano kwa miaka na nina vipuri vingi. Inakuja kubeba vitu vizuri: spika ya piezo, RGB mbili za RGB (moja imefungwa kwa nguvu, RX na TX ingawa) na bora zaidi, unaweza kuziba kwenye bandari ya USB - hakuna FTDI ya nje au kebo inayohitajika. Pia ni ndogo bado mkate unalingana.

Kwa nini sikuchagua ESP8266? Kuwa mkweli bila waya, unaweza pia kukata kamba ya umeme - ambayo inafanya mambo kuwa ngumu zaidi kwa kuongeza betri na usumbufu wa kuchaji tena. Kwa kuwa mfuatiliaji wa wingu atakaa karibu na kompyuta yangu ni rahisi kutumia nguvu ya USB. Pia kuanzisha unganisho la Wi-Fi sio mara kwa mara mbele. Kwa msingi wa ATmega32u4, Arduino Micro na LeoStick wanashirikiana isiyo ya kawaida na data ya I2C kwenye D2 na saa kwenye D3. Hii inakuwa muhimu wakati wa kuunganisha BlinkM RGB LED. Tofauti na bodi za kawaida za Atmega328 ambapo unaweza kuziba ngao ya BlinkM kwenye vichwa A2.. A5, hii haitafanya kazi hapa (sikujisumbua na maktaba laini ya I2C).

Kwa kufuta vichwa vya kiume VCC na GND kwenye BlinkM, basi ningeweza kupanua zile zilizo na waya na kuweka kila kitu kwenye kifurushi kidogo kinachoweza kuziba. BlinkM ina mdhibiti wake mdogo kwenye bodi na inaruhusu matumizi ya hali ya juu: k.m. cheza mifumo ya rangi isiyo na maandishi bila Arduino iliyounganishwa. Karibu nihisi WS2812 (Adafruits NeoPixels ni nzuri) ingekuwa ikinitumikia vyema - ole sikuwa na inapatikana. Ili kumaliza vifaa kidogo, nilikata ncha ya upande wa kuziba aina ya kiume-A ya USB, nikakung'uta kupitia shimo lililopigwa tayari karibu na wigo wa taa ya wingu na nikauzia waya kwa LeoStick (nyekundu: 5V, nyeupe: Takwimu-, kijani: Takwimu +, nyeusi: Ardhi).

Hatua ya 3: Usanifu wa Suluhisho

Usanifu wa suluhisho
Usanifu wa suluhisho
Usanifu wa suluhisho
Usanifu wa suluhisho

Mahitaji ya nguvu tu niliyojiwekea, ilikuwa kuwa na mfuatiliaji aendeshe nyuma ya firewall. Ingawa ni jambo muhimu, hii ilifanya kulabu za wavuti kwa mabadiliko ya hafla zisizowezekana. Utaratibu wa kupigia kura ni wa gharama kubwa kulingana na trafiki ya TCP na inaweza kuchelewesha matukio kulingana na mzunguko wa kura.

Suluhisho linapatikana katika Wavuti za Wavuti ambazo hutoa mawasiliano kamili ya duplex. Huduma ya Amazons IoT hutoa broker ya ujumbe ambayo inasaidia MQTT juu ya WebSocket. Kama inavyotokea, huduma inaweza kuitwa bila kusanidi Vitu, Shadows, Sera au Sheria.

Kuna kifaa SDK inapatikana kwa Arduino Yún na juhudi zingine hufanywa kwa kuhamisha SDK kwa majukwaa mengine kama ESP8266. Lakini kwa sababu mfuatiliaji ataunganishwa kila wakati na kiolesura cha serial, niliamua mapema kuwa na programu ya NodeJS (kukimbia kwenye kompyuta ya mezani) kutekeleza API ya mteja na kutumia Arduino tu kupokea na kuonyesha nambari za rangi. Kwa njia hiyo mabadiliko yanaweza kufanywa kwa urahisi katika JavaScript, bila kujisumbua na upakiaji wa firmware. Kwa kupima mfano kidogo miundombinu inahitajika. Wacha tuseme tuna balancer ya mzigo inayowezeshwa katika maeneo ya upatikanaji ambayo inakagua afya kwenye mfano wa seva ya wavuti na sera za kuongeza auto kulingana na mzigo wa CPU. Kiolezo kinachofanana cha CloudFormation kinaweza viewed ️ kutazamwa kwa Mbuni au ▶ ️ iliyoundwa moja kwa moja kutoka kwa koni. Kumbuka: huduma zingine kwenye ghala hii zinaweza kulipia ada.

Nilipanua templeti na mali kwa kazi ya Lambda na idhini muhimu. Baadaye zinahitaji mwisho wa IoT REST API kuingizwa kama parameta. Ili kurekebisha hii, niliandika hati ndogo ya ganda ambayo hutumia CLI kuomba ARN (> aws iot define-endpoint) na kisha nitaita stack-stack na parameter in-line. Au bado unaweza kuifanya kwa mkono:

// RETRIVE IoT REST API ENDPOINT

aws iot kuelezea-mwisho

// CREATE STACK> aws cloudformation create-stack - stack-name MiniCloudMonitor --template-body file: //cfn-template.json --parameters ParameterKey = IotRestApiEndpoint, ParameterValue = {IoT_REST_API_ENDPOINT} - uwezo CAPABILITY_NAMED_IAM

// FUTA KIWANGO> aws cloudformation kufuta-stack -stack-name MiniCloudMonitor

Kwa kweli ni lazima nitumie vizingiti sawa vya kengele ambavyo vinasababisha kuongezeka kwa gari, kwa pia kuita kazi ya Lambda na kwa njia hiyo kusasisha hali ya mfuatiliaji. Hivi sasa hii inawezekana tu wakati wa kutumia SNS kama kati. Wakati huo safu hii ya ziada ilisikia kutokuwa na maana na niliamua kutumia Kanuni za lifecycle ya CloudWatch EC2 kuita Lambda moja kwa moja. Bado, nataka kuchunguza chaguo la SNS → Lambda katika siku zijazo.

Hatua ya 4: Programu

Nilianza kwa kuandika Mchoro wa Arduino. Kitanzi kuu () kinasoma Chars kutoka kwa unganisho la serial na kujenga Kamba hadi ipokee herufi mpya. Inachukuliwa kuwa nambari ya rangi ya hex ilitumwa na amri inayofaa ya I2C imeandikwa kwa BlinkM LED. Hii sio sana juu ya ufanisi kama urahisi. Vyanzo kamili vya Mchoro huu na faili zingine zinaweza kupatikana kwenye GitHub. Zifuatazo ni baadhi ya vijisehemu vya nambari zinazofaa:

kitanzi batili () {

wakati (Serial haipatikani ()) {

char inChar = (char) Serial.read ();

ikiwa (inChar == '\ n') {

nambari ndefu = strtol (inputString.c_str (), NULL, 16);

byte r = nambari >> 16;

byte g = nambari >> 8 & 0xFF;

baiti b = nambari & 0xFF;

BlinkM_fadeToRGB (blinkm_addr, r, g, b);

pembejeoString = "";

} mwingine {

pembejeoString + = inChar;

}

}

}

Programu ya NodeJS inapaswa kutekeleza miingiliano kwa AWS na Arduino. Baadaye inaweza kutimizwa kwa mistari michache tu ya nambari wakati wa kutumia kifurushi bora cha serial:

bandari ya serial = zinahitaji ('serialport'); bandari = serialport mpya (PORT_COM_NAME, {

Kiwango cha baud: SERIAL_BAUD_RATE

});

port.on ('wazi', kazi () {

});

port.on ('makosa', kazi (makosa) {

});

Kuunganisha na AWS IoT inahitaji bidii kubwa sana ama. Shimo pekee ni kujua kwamba kutumia MQTT + WebSocket juu ya bandari 443 inahitaji uthibitisho kupitia Funguo za Ufikiaji. SDK itasoma haya kutoka kwa anuwai ya mazingira. Inaweza kuwa muhimu kusafirisha wazi AWS_ACCESS_KEY_ID na AWS_SECRET_ACCESS_KEY.

var awsiot = zinahitaji ('aws-iot-device-sdk'); var kifaa = awsiot.device ({

mtejaId: 'MiniCloudMonitor-' + (Math.floor ((Math.random () * 100000) + 1)), mkoa: AWS_REGION, itifaki: 'wss', bandari: 443, utatuzi: kweli

});

kifaa.on ('unganisha', fanya kazi () {

jiandikishe kifaa (MQTT_TOPIC);

});

kifaa.on ('ujumbe', kazi (mada, upakiaji wa malipo) {

ikiwa (bandari && upakiaji wa malipo && mada == MQTT_TOPIC) {

var message = JSON.parse (malipo ya malipo);

ikiwa (message.hasOwnProperty (MQTT_JSON_KEY))

{kurudi;

}

}

});

Kazi ya Lambda inakubali nambari ya rangi kama kigezo cha kuingiza - sio nzuri, lakini rahisi sana katika hatua hii. Ili kuweza kuchapisha mada ya MQTT, inasisitiza kitu cha IotData, ambacho kinahitaji mwisho wa IoT REST API. Template ya CloudFormation ilitunza hiyo wakati wa kuunda stack.

var AWS = zinahitaji ('aws-sdk'); var mqtt = mpya AWS. IotData ({

ncha ya mwisho: mchakato.env. MQTT_ENDPOINT});

exports.handler = kazi (tukio, muktadha, kupiga tena simu) {

vielelezo vya var = {

mada: mchakato.env. MQTT_TOPIC, payload: '{ "color \": / "' + event.colour + '\"}', qos: 0

};

kuchapisha (vifungu, kazi (makosa, data) {

kupiga simu tena (makosa);

});

};

Hatua ya 5: Hitimisho

Nilifurahiya sana kuleta tukio la kweli "kuzaliwa" katika wingu kwenye ulimwengu wa mwili. Na kama mradi wangu mdogo wa kipenzi ilikuwa chungu za kufurahisha. Kuchukua hii kwa ngazi inayofuata ningezingatia…

  • kuboresha uimara na utunzaji wa ubaguzi
  • chunguza njia bora za kujumlisha metriki za wingu za AWS
  • jaribu na viashiria zaidi vya mwili kama viwango, grafu za baa,…
  • wana chaguo la kuhamia kwenye majukwaa mengine kama Azure, Google, Heroku,…
  • kufuatilia matukio maalum ya matumizi ya Jenkins, GitHub,…

Natumai ulifurahiya kusoma mwongozo huu na labda hata ulichukua kitu kipya njiani. Ikiwa unaweza kufikiria njia tofauti / bora ya kufanya mambo tafadhali shiriki kwenye maoni hapa chini. Na kwa kweli, ikiwa utaona makosa kichwa cha kichwa kitathaminiwa sana. Asante kwa wakati wako.

Ilipendekeza: