Приложението ще започне да работи и ще се отвори във вашия уеб браузър:


То ще бъде отбелязано като *Disconnected*, със светодиод в горния десен ъгъл, който е изключен.
@ -224,7 +224,7 @@
1. В този нов терминал стартирайте файла `app.py`, както преди. Статусът на CounterFit ще се промени на **Connected**, и светодиодът ще светне.


> 💁 Можете да намерите този код в папката [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device).


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -38,7 +38,7 @@
Тези устройства взаимодействат с физическия свят, като използват сензори за събиране на данни от околната среда или чрез контролиране на изходи или задвижващи механизми за извършване на физически промени. Типичен пример за това е интелигентен термостат - устройство, което има температурен сензор, средство за задаване на желаната температура, като например циферблат или сензорен екран, и връзка с отоплителна или охлаждаща система, която може да се включи, когато откритата температура е извън желаните граници. Температурният сензор открива, че стаята е твърде студена, и задвижващ механизъм включва отоплението.


Съществува огромен набор от различни устройства, които могат да действат като IoT устройства - от специализирани хардуери, които засичат едно нещо, до универсални устройства, дори вашия смартфон! Смартфонът може да използва сензори за откриване на света около него и задвижващи механизми за взаимодействие със света - например, използвайки GPS сензор за откриване на вашето местоположение и високоговорител за предоставяне на навигационни инструкции до дестинация.
@ -54,7 +54,7 @@
В примера с интелигентния термостат, термостатът би се свързал чрез домашен WiFi към облачна услуга, работеща в облака. Той би изпратил данните за температурата към тази облачна услуга, откъдето те ще бъдат записани в база данни, позволявайки на собственика на дома да провери текущите и минали температури чрез приложение на телефона. Друга услуга в облака би знаела каква температура иска собственикът на дома и би изпратила съобщения обратно към IoT устройството чрез облачната услуга, за да каже на отоплителната система да се включи или изключи.


Още по-интелигентна версия би могла да използва AI в облака с данни от други сензори, свързани към други IoT устройства, като сензори за заетост, които откриват кои стаи се използват, както и данни като времето и дори вашия календар, за да взема решения как да настрои температурата по интелигентен начин. Например, тя би могла да изключи отоплението, ако прочете от вашия календар, че сте на почивка, или да изключи отоплението на стая по стая, в зависимост от това кои стаи използвате, като се учи от данните, за да става все по-точна с времето.
@ -94,7 +94,7 @@ CPU разчита на часовник, който тиктака милион
> 💁 CPU изпълнява програми, използвайки [fetch-decode-execute цикъл](https://wikipedia.org/wiki/Instruction_cycle). За всеки тик на часовника CPU ще извлече следващата инструкция от паметта, ще я декодира и след това ще я изпълни, като например използва аритметично-логическо устройство (ALU), за да събере 2 числа. Някои изпълнения ще отнемат няколко тика, така че следващият цикъл ще се изпълни при следващия тик след завършването на инструкцията.


Микроконтролерите имат много по-ниски скорости на часовника от настолните или лаптоп компютри, или дори от повечето смартфони. Например, Wio Terminal има CPU, който работи на 120MHz или 120,000,000 цикъла в секунда.
@ -178,7 +178,7 @@ CPU разчита на часовник, който тиктака милион
Вие бихте написали вашия начален код във функцията `setup`, като например свързване към WiFi и облачни услуги или инициализиране на пинове за вход и изход. Вашият код за обработка би се намирал във функцията `loop`, като например четене от сензор и изпращане на стойността към облака. Обикновено бихте включили забавяне във всяка итерация на цикъла, например ако искате данните от сензора да се изпращат на всеки 10 секунди, бихте добавили забавяне от 10 секунди в края на цикъла, за да може микроконтролерът да спи, спестявайки енергия, след което да изпълни цикъла отново, когато е необходимо, 10 секунди по-късно.


✅ Тази архитектура на програмиране е известна като *цикъл на събития* или *цикъл на съобщения*. Много приложения използват това под капака и това е стандартът за повечето десктоп приложения, които работят на операционни системи като Windows, macOS или Linux. Функцията `loop` слуша за съобщения от компоненти на потребителския интерфейс като бутони или устройства като клавиатурата и реагира на тях. Можете да прочетете повече в тази [статия за цикъла на събития](https://wikipedia.org/wiki/Event_loop).
# Взаимодействие с физическия свят чрез сензори и изпълнителни устройства


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -92,7 +92,7 @@ IoT устройствата са цифрови - те не могат да р
Най-простият цифров сензор е бутон или превключвател. Това е сензор с две състояния - включено или изключено.


Пиновете на IoT устройства, като GPIO пинове, могат директно да измерват този сигнал като 0 или 1. Ако напрежението, което се изпраща, е същото като напрежението, което се връща, стойността е 1, в противен случай стойността е 0. Няма нужда от преобразуване на сигнала, той може да бъде само 1 или 0.
@ -125,7 +125,7 @@ IoT устройствата са цифрови - те не могат да р
Следвайте съответното ръководство по-долу, за да добавите изпълнително устройство към вашето IoT устройство, контролирано от сензора, за да създадете IoT нощна лампа. Тя ще събира нива на светлина от светлинния сензор и ще използва изпълнително устройство под формата на LED, за да излъчва светлина, когато засеченото ниво на светлина е твърде ниско.


@ -140,7 +140,7 @@ IoT устройствата са цифрови - те не могат да р
Аналоговите изпълнителни устройства приемат аналогов сигнал и го преобразуват в някакъв вид взаимодействие, при което взаимодействието се променя в зависимост от подаденото напрежение.
Един пример е димируема светлина, като тези, които може да имате у дома. Количеството напрежение, подадено към свет


Както при сензорите, реалното IoT устройство работи с цифрови сигнали, а не с аналогови. Това означава, че за да изпрати аналогов сигнал, IoT устройството се нуждае от цифрово-аналогов преобразувател (DAC), който може да бъде вграден директно в устройството или да се намира на свързваща платка. Този преобразувател превръща 0 и 1 от IoT устройството в аналогово напрежение, което изпълнителният механизъм може да използва.
@ -187,7 +187,7 @@ IoT устройствата са цифрови - те не могат да р
Един прост цифров изпълнителен механизъм е LED. Когато устройството изпрати цифров сигнал 1, се изпраща високо напрежение, което включва LED. Когато се изпрати цифров сигнал 0, напрежението пада до 0V и LED се изключва.


✅ Какви други прости изпълнителни механизми с две състояния можете да измислите? Един пример е соленоид, който е електромагнит, който може да се активира, за да извършва действия като преместване на болт за заключване/отключване на врата.
1. Изберете любимия си LED и поставете крачетата му в двете отвори на LED модула.
@ -40,7 +40,7 @@ Grove LED идва като модул с избор от светодиоди,
1. С изключен Raspberry Pi свържете другия край на Grove кабела към цифровото гнездо, маркирано **D5** на Grove Base hat, прикрепен към Pi. Това гнездо е второто отляво, на реда от гнезда до GPIO пиновете.


1. Поставете единия край на Grove кабела в гнездото на модула на светлинния сензор. Кабелът може да бъде поставен само в една посока.
1. С изключен Raspberry Pi свържете другия край на Grove кабела към аналоговото гнездо, обозначено като **A0** на Grove Base hat, прикрепен към Pi. Това гнездо е второто отдясно в реда от гнезда до GPIO пиновете.


След като LED е създаден, можете да промените цвета му, използвайки инструмента *Color picker*. Натиснете бутона **Set**, за да промените цвета, след като сте го избрали.
1. Натиснете бутона **Add**, за да създадете светлинния сензор на Pin 0.


Светлинният сензор ще бъде създаден и ще се появи в списъка със сензори.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -47,7 +47,7 @@ MQTT е най-популярният комуникационен проток
MQTT има един брокер и множество клиенти. Всички клиенти се свързват с брокера, а брокерът маршрутизира съобщенията към съответните клиенти. Съобщенията се маршрутизират чрез именувани теми, вместо да се изпращат директно към индивидуален клиент. Клиент може да публикува в тема, а всички клиенти, които са абонирани за тази тема, ще получат съобщението.


✅ Направете проучване. Ако имате много IoT устройства, как можете да гарантирате, че вашият MQTT брокер може да обработи всички съобщения?
@ -69,7 +69,7 @@ MQTT има един брокер и множество клиенти. Всич
> 💁 Този тестов брокер е публичен и не е защитен. Всеки може да слуша какво публикувате, така че не трябва да се използва за данни, които трябва да останат поверителни.


Следвайте съответната стъпка по-долу, за да свържете устройството си с MQTT брокера:
@ -350,7 +350,7 @@ MQTT връзките могат да бъдат публични и отвор
Дизайнерите на IoT устройства също трябва да обмислят дали IoT устройството може да бъде използвано по време на прекъсване на интернет или загуба на сигнал, причинена от местоположение. Умният термостат трябва да може да взема някои ограничени решения за контрол на отоплението, ако не може да изпраща телеметрия към облака поради прекъсване.
[](https://twitter.com/internetofshit/status/1315736960082808832)
[](https://twitter.com/internetofshit/status/1315736960082808832)
За MQTT, за да се справи със загуба на свързаност, устройството и сървърният код ще трябва да бъдат отговорни за осигуряване на доставката на съобщения, ако е необходимо, например чрез изискване всички изпратени съобщения да бъдат отговорени с допълнителни съобщения на тема за отговор, и ако не, те да бъдат опашени ръчно, за да бъдат преиграни по-късно.
@ -358,7 +358,7 @@ MQTT връзките могат да бъдат публични и отвор
Командите са съобщения, изпратени от облака към устройство, инструктиращи го да направи нещо. Повечето от времето това включва даване на някакъв вид изход чрез актуатор, но може да бъде инструкция за самото устройство, като например да се рестартира или да събере допълнителна телеметрия и да я върне като отговор на командата.


Термостат може да получи команда от облака да включи отоплението. Въз основа на телеметричните данни от всички сензори, ако облачната услуга е решила, че отоплението трябва да бъде включено, тя изпраща съответната команда.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -90,7 +90,7 @@
Пълната формула за GDD е малко сложна, но има опростено уравнение, което често се използва като добра приблизителност:


* **GDD** - това е броят на дните на растеж
* **T max** - това е дневната максимална температура в градуси Целзий
@ -118,7 +118,7 @@
Това дава изчисление:


Царевицата е получила 4 GDD за този ден. Ако приемем сорт царевица, който се нуждае от 800 GDD, за да узрее, ще са необходими още 796 GDD, за да достигне зрелост.
@ -231,7 +231,7 @@ CSV файлът ще има две колони - *дата* и *темпера
Например, ако най-високата температура за деня е 25°C, а най-ниската е 12°C:


Jupyter ще се стартира и ще отвори notebook-а във вашия браузър. Следвайте инструкциите в notebook-а, за да визуализирате измерените температури и да изчислите дните на растеж (GDD).
1. Поставете единия край на кабела Grove в гнездото на сензора за влажност и температура. Кабелът може да бъде поставен само в една посока.
1. С изключен Raspberry Pi свържете другия край на кабела Grove към цифровото гнездо, обозначено като **D5** на Grove Base hat, прикрепен към Pi. Това гнездо е второто отляво, в реда от гнезда до GPIO пиновете.


1. Натиснете бутона **Add**, за да създадете сензора за влажност на Pin 5.


Сензорът за влажност ще бъде създаден и ще се появи в списъка със сензори.


1. Създайте температурен сензор:
@ -54,11 +54,11 @@
1. Натиснете бутона **Add**, за да създадете температурния сензор на Pin 6.


Температурният сензор ще бъде създаден и ще се появи в списъка със сензори.
@ -13,7 +13,7 @@ I²C има шина, състояща се от 2 основни проводн
| VCC | Общ колектор на напрежение | Захранването за устройствата. Това е свързано към проводниците SDA и SCL, за да осигури тяхното захранване чрез pull-up резистор, който изключва сигнала, когато няма устройство, което да е контролер. |
| GND | Земя | Осигурява обща земя за електрическата верига. |


За да изпрати данни, едно устройство издава стартово условие, за да покаже, че е готово да изпрати данни. След това то става контролер. Контролерът изпраща адреса на устройството, с което иска да комуникира, заедно с информация дали иска да чете или записва данни. След като данните са предадени, контролерът изпраща стоп условие, за да покаже, че е приключил. След това друго устройство може да стане контролер и да изпраща или получава данни.
Гравиметричната почвена влажност се изчислява по следната формула:


* W - теглото на мократа почва
* W - теглото на сухата почва
Например, да кажем, че имате почвена проба с тегло 212 г мокра и 197 гсуха.
@ -18,13 +18,13 @@ Grove сензорът за влажност на почвата може да
Свържете сензора за влажност на почвата.


1. Поставете единия край на Grove кабела в гнездото на сензора за влажност на почвата. Кабелът може да бъде поставен само в една посока.
1. С изключено захранване на Raspberry Pi свържете другия край на Grove кабела към аналоговото гнездо, маркирано като **A0**, на Grove Base Hat, прикрепен към Pi. Това гнездо е второто отдясно в реда от гнезда до GPIO пиновете.


1. Поставете сензора за влажност на почвата в почвата. Той има линия за "най-висока позиция" – бяла линия, която минава през сензора. Поставете сензора до тази линия, но не я преминавайте.
1. Натиснете бутона **Add**, за да създадете сензора *Soil Moisture* на Pin 0.


Сензорът за влажност на почвата ще бъде създаден и ще се появи в списъка със сензори.


## Програмиране на приложението за сензор за влажност на почвата
@ -18,7 +18,7 @@ Grove сензорът за влажност на почвата може да
Свържете сензора за влажност на почвата.


1. Поставете единия край на Grove кабела в гнездото на сензора за влажност на почвата. Той ще влезе само в една посока.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -32,7 +32,7 @@ IoT устройствата използват ниско напрежение.
Решението за това е да имате помпа, свързана към външно захранване, и да използвате изпълнителен механизъм за включване на помпата, подобно на това как бихте включили лампа. Необходима е малка мощност (под формата на енергия в тялото ви), за да може пръстът ви да натисне ключа, и това свързва лампата към електрическата мрежа, работеща на 110v/240v.


> 🎓 [Електрическата мрежа](https://wikipedia.org/wiki/Mains_electricity) се отнася до електричеството, доставяно до домове и бизнеси чрез национална инфраструктура в много части на света.
@ -72,7 +72,7 @@ IoT устройствата използват ниско напрежение.
Електромагнитът не се нуждае от много мощност, за да се активира и да издърпа лоста, той може да се контролира с 3.3V или 5V изход от IoT dev kit. Изходната верига може да носи много повече мощност, в зависимост от релето, включително напрежение от електрическата мрежа или дори по-високи нива на мощност за индустриална употреба. По този начин IoT dev kit може да контролира система за напояване, от малка помпа за едно растение до огромна индустриална система за цяла търговска ферма.


Изображението по-горе показва реле Grove. Управляващата верига се свързва към IoT устройство и включва или изключва релето, използвайки 3.3V или 5V. Изходната верига има два терминала, всеки от тях може да бъде захранване или земя. Изходната верига може да обработва до 250V при 10A, достатъчно за редица устройства, захранвани от електрическата мрежа. Можете да получите релета, които могат да обработват дори по-високи нива на мощност.
1. Поставете единия край на Grove кабела в гнездото на релето. Той ще влезе само в една посока.
1. С изключено захранване на Raspberry Pi, свържете другия край на Grove кабела към цифровото гнездо, означено като **D5** на Grove Base Hat, прикрепен към Pi. Това гнездо е второто отляво, на реда с гнезда до GPIO пиновете. Оставете сензора за влажност на почвата свързан към гнездото **A0**.


1. Поставете сензора за влажност на почвата в почвата, ако вече не е поставен от предишния урок.
1. Изберете бутона **Add**, за да създадете релето на Pin 5.


Релето ще бъде създадено и ще се появи в списъка с актуатори.
Облакът често се нарича шеговито "компютър на някой друг". Първоначалната идея беше проста - вместо да купувате компютри, наемате компютър на някой друг. Някой друг, доставчик на облачни услуги, управлява огромни центрове за данни. Те отговарят за закупуването и инсталирането на хардуера, управлението на електрозахранването и охлаждането, мрежовата свързаност, сигурността на сградата, актуализациите на хардуера и софтуера - всичко. Като клиент, вие наемате компютрите, които ви трябват, наемате повече, когато търсенето се увеличава, и намалявате броя, когато търсенето намалява. Тези облачни центрове за данни са разположени по целия свят.




Тези центрове за данни могат да бъдат с площ от няколко квадратни километра. Изображенията по-гореса направени преди няколко години в облачен център за данни на Microsoft и показват първоначалния размер, както и планираното разширение. Разчистената площ за разширението е над 5 квадратни километра.
@ -108,11 +108,11 @@ IoT услугите в облака решават тези проблеми.
IoT устройствата се свързват с облачна услуга или чрез SDK за устройства (библиотека, която предоставя код за работа с функциите на услугата), или директно чрез комуникационен протокол като MQTT или HTTP. SDK за устройства обикновено е най-лесният начин, тъй като се грижи за всичко, като например знае кои теми да публикува или абонира, и как да обработва сигурността.


Вашето устройство след това комуникира с други части на вашето приложение чрез тази услуга - подобно на начина, по който изпращахте телеметрия и получавахте команди чрез MQTT. Това обикновено става чрез SDK за услуги или подобна библиотека. Съобщенията идват от вашето устройство към услугата, където други компоненти на вашето приложение могат да ги прочетат, а съобщенията могат да бъдат изпратени обратно към вашето устройство.


Тези услуги внедряват сигурност, като знаят за всички устройства, които могат да се свържат и изпращат данни, или чрез предварителна регистрация на устройствата в услугата, или чрез предоставяне на устройства с тайни ключове или сертификати, които могат да използват за регистрация в услугата при първото свързване. Непознати устройства не могат да се свържат; ако опитат, услугата отхвърля връзката и игнорира изпратените от тях съобщения.
@ -124,7 +124,7 @@ IoT устройствата се свързват с облачна услуг
Сега, когато имате абонамент за Azure, можете да се регистрирате за IoT услуга. IoT услугата на Microsoft се нарича Azure IoT Hub.


Видеото по-долу предоставя кратък преглед на Azure IoT Hub:
# Мигрирайте логиката на вашето приложение към облака


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -28,7 +28,7 @@
Serverless, или serverless изчисления, включва създаването на малки блокове код, които се изпълняват в облака в отговор на различни видове събития. Когато събитието се случи, вашият код се изпълнява и получава данни за събитието. Тези събития могат да бъдат от различни източници, включително уеб заявки, съобщения в опашка, промени в база данни или съобщения, изпратени към IoT услуга от IoT устройства.


> 💁 Ако сте използвали тригери в база данни, можете да мислите за това като за нещо подобно – код, който се задейства от събитие, като например добавяне на ред.
@ -54,7 +54,7 @@ Serverless, или serverless изчисления, включва създав
Услугата за serverless изчисления от Microsoft се нарича Azure Functions.


Краткото видео по-долу предоставя преглед на Azure Functions.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -52,11 +52,11 @@ IoT сигурността включва гарантиране, че само
Когато устройство се свързва с IoT услуга, то използва идентификатор, за да се идентифицира. Проблемът е, че този идентификатор може да бъде клониран – хакер може да настрои злонамерено устройство, което използва същия идентификатор като истинското устройство, но изпраща фалшиви данни.


Решението на този проблем е да се преобразуват данните, които се изпращат, в разбъркан формат, използвайки стойност, известна само на устройството и облака. Този процес се нарича *криптиране*, а стойността, използвана за криптиране на данните, се нарича *ключ за криптиране*.


Облачната услуга може след това да преобразува данните обратно в четим формат, използвайки процес, наречен *декриптиране*, като използва или същия ключ за криптиране, или *ключ за декриптиране*. Ако криптираното съобщение не може да бъде декриптирано с ключа, устройството е било хакнато и съобщението се отхвърля.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -63,13 +63,13 @@ IoT трансформира начина, по който се транспор
> 💁 Никой не знае със сигурност оригиналната причина защо кръговете са разделени на 360 градуса. [Страницата за градус (ъгъл) в Уикипедия](https://wikipedia.org/wiki/Degree_(angle)) обяснява някои от възможните причини.


Ширината се измерва с линии, които обикалят Земята и са успоредни на екватора, разделяйки Северното и Южното полукълбо на по 90°. Екваторът е на 0°, Северният полюс е на 90°, известен също като 90° северна ширина, а Южният полюс е на -90°, или 90° южна ширина.
Дължината се измерва като броя на градусите, измерени на изток и запад. Началната точка на дължината е*първият меридиан*, който е дефиниран през 1884 г. като линия от Северния до Южния полюс, преминаваща през [Кралската обсерватория в Гринуич, Англия](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich).


> 🎓 Меридиан е въображаема права линия, която преминава от Северния полюс до Южния полюс, образувайки полукръг.
@ -100,7 +100,7 @@ IoT трансформира начина, по който се транспор
* Ширина от 47.6423109 (47.6423109 градуса северно от екватора)
* Дължина от -122.1390293 (122.1390293 градуса западно от първия меридиан).


## Глобални позициониращи системи (GPS)
@ -112,7 +112,7 @@ GPS системите работят, като имат редица сател
> 💁 GPS сензорите се нуждаят от антени, за да засичат радиовълни. Антените, вградени в камиони и автомобили с вграден GPS, са позиционирани така, че да получават добър сигнал, обикновено на предното стъкло или покрива. Ако използвате отделна GPS система, като смартфон или IoT устройство, трябва да се уверите, че антената, вградена в GPS системата или телефона, има ясен изглед към небето, например като е монтирана на предното стъкло.


GPS сателитите обикалят Земята, а не са на фиксирана точка над сензора, така че данните за местоположението включват височина над морското равнище, както и ширина и дължина.
1. Поставете единия край на Grove кабела в гнездото на GPS сензора. Кабелът може да бъде поставен само в една посока.
1. С изключен Raspberry Pi, свържете другия край на Grove кабела към гнездото UART, маркирано **UART** на Grove Base шапката, прикрепена към Pi. Това гнездо се намира на средния ред, от страната, най-близка до слота за SD карта, противоположно на USB портовете и Ethernet гнездото.


1. Поставете GPS сензора така, че прикрепената антена да има видимост към небето - идеално до отворен прозорец или навън. По-лесно е да получите ясен сигнал, когато няма препятствия пред антената.
1. Изберете бутона **Add**, за да създадете GPS сензора на порт `/dev/ttyAMA0`.


GPS сензорът ще бъде създаден и ще се появи в списъка със сензори.
* Задайте **Source** на `Lat/Lon` и задайте конкретна ширина, дължина и брой сателити, използвани за GPS фиксация. Тази стойност ще бъде изпратена само веднъж, така че маркирайте полето **Repeat**, за да се повтаря данните всяка секунда.


* Задайте **Source** на `NMEA` и добавете няколко NMEA изречения в текстовото поле. Всички тези стойности ще бъдат изпратени, като има забавяне от 1 секунда преди всяко ново GGA (позиционна фиксация) изречение да бъде прочетено.


Можете да използвате инструмент като [nmeagen.org](https://www.nmeagen.org), за да генерирате тези изречения, като рисувате върху карта. Тези стойности ще бъдат изпратени само веднъж, така че маркирайте полето **Repeat**, за да се повтарят данните една секунда след като всички са изпратени.
* Задайте **Source** на GPX файл и качете GPX файл с местоположения на тракове. Можете да изтеглите GPX файлове от редица популярни сайтове за карти и туризъм, като [AllTrails](https://www.alltrails.com/). Тези файлове съдържат множество GPS местоположения като трак, а GPS сензорът ще връща всяко ново местоположение на интервали от 1 секунда.


Тези стойности ще бъдат изпратени само веднъж, така че маркирайте полето **Repeat**, за да се повтарят данните една секунда след като всички са изпратени.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -75,7 +75,7 @@ NoSQL базите данни се наричат така, защото ням
> 💁 Въпреки името си, някои NoSQL бази данни позволяват използването на SQL за извличане на данни.


NoSQL базите данни нямат предварително дефинирана схема, която ограничава начина на съхранение на данни. Вместо това можете да вмъквате всякакви неструктурирани данни, обикновено използвайки JSON документи. Тези документи могат да бъдат организирани в папки, подобно на файлове на вашия компютър. Всеки документ може да има различни полета от другите документи - например, ако съхранявате IoT данни от селскостопански превозни средства, някои може да имат полета за данни от акселерометър и скорост, а други - за температура в ремаркето. Ако добавите нов тип камион, например такъв с вградени везни за проследяване на теглото на превозваната продукция, вашето IoT устройство може да добави това ново поле и то може да бъде съхранено без промени в базата данни.
@ -89,7 +89,7 @@ NoSQL базите данни нямат предварително дефини
В последния урок улавяхте GPS данни от GPS сензор, свързан с вашето IoT устройство. За да съхраните тези IoT данни в облака, трябва да ги изпратите към IoT услуга. Отново ще използвате Azure IoT Hub, същата IoT облачна услуга, която използвахте в предишния проект.


След като данните започнат да се изпращат към вашия IoT Hub, можете да напишете безсървърен код, който да слуша събития, публикувани към Event-Hub съвместимия край. Това е топлият път - тези данни ще бъдат съхранени и използвани в следващия урок за отчитане на пътуването.


### Задача - обработка на GPS събития с безсървърен код


Azure Storage Accounts е универсална услуга за съхранение, която може да съхранява данни по различни начини. Можете да съхранявате данни като блобове, в опашки, в таблици или като файлове, и всичко това едновременно.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -64,11 +64,11 @@
За човек разбирането на тези данни може да бъде трудно. Това е стена от числа без контекст. Като първа стъпка към визуализацията на тези данни, те могат да бъдат нанесени на линейна диаграма:


Тази диаграма може да бъде допълнително подобрена, като се добави линия, която показва кога автоматичната система за напояване сее включила при стойност на влажността на почвата от 450:


Тази диаграма показва много бързо не само какви са били нивата на влажност на почвата, но и точките, в които системата за напояване сее включила.
@ -84,7 +84,7 @@
Работата с карти е интересна задача, като има много опции за избор, като Bing Maps, Leaflet, Open Street Maps и Google Maps. В този урок ще научите за [Azure Maps](https://azure.microsoft.com/services/azure-maps/?WT.mc_id=academic-17441-jabenn) и как те могат да визуализират вашите GPS данни.


Azure Maps е "колекция от геопространствени услуги и SDK, които използват актуални картографски данни, за да предоставят географски контекст за уеб и мобилни приложения." Разработчиците разполагат с инструменти за създаване на красиви, интерактивни карти, които могат да предоставят препоръчителни маршрути, информация за пътни инциденти, вътрешна навигация, възможности за търсене, информация за надморска височина, метеорологични услуги и други.
@ -185,7 +185,7 @@ Azure Maps е "колекция от геопространствени услу
Ако отворите вашия `index.html` файл в уеб браузър, трябва да видите карта, заредена и фокусирана върху района на Сиатъл.


✅ Експериментирайте с параметрите за мащабиране и центриране, за да промените изгледа на картата. Можете да добавите различни координати, съответстващи на ширината и дължината на вашите данни, за да прецентрирате картата.
@ -319,7 +319,7 @@ Azure Maps е "колекция от геопространствени услу
1. Заредете HTML страницата в браузъра си. Тя ще зареди картата, след това ще зареди всички GPS данни от хранилището и ще ги изобрази на картата.


> 💁 Можете да намерите този код в [папката с код](../../../../../3-transport/lessons/3-visualize-location-data/code).


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -35,7 +35,7 @@
Геозоната е виртуален периметър за реален географски регион. Геозоните могат да бъдат кръгове, дефинирани като точка и радиус (например кръг с ширина 100 м около сграда), или полигони, обхващащи зона като училищна зона, градски граници или университетски или офис кампус.


> 💁 Може би вече сте използвали геозони, без да знаете. Ако сте задали напомняне с приложението за напомняния на iOS или Google Keep въз основа на местоположение, сте използвали геозона. Тези приложения създават геозона въз основа на зададеното местоположение и ви уведомяват, когато телефонът ви влезе в геозоната.
@ -212,7 +212,7 @@ Azure Maps, услугата, която използвахте в послед
Например, представете си GPS показания, показващи, че превозното средство се движи по път, който в крайна сметка минава до геозона. Ако една GPS стойност е неточна и поставя превозното средство вътре в геозоната, въпреки че няма достъп за превозни средства, тогава тя може да бъде игнорирана.


На изображението по-горее показан геозон, обхващащ част от кампуса на Microsoft. Червената линия показва камион, който се движи по магистрала 520, като кръговете обозначават GPS отчитанията. Повечето от тях са точни и се намират по магистралата, но едно отчитане е неточно и попада в геозона. Няма как това отчитане да е вярно – няма пътища, по които камионът внезапно да се отклони от магистралата към кампуса и след това да се върне обратно на магистралата. Кодът, който проверява този геозон, ще трябва да вземе предвид предишните отчитания, преди да действа въз основа на резултатите от теста на геозона.
✅ Какви допълнителни данни бихте проверили, за да определите дали едно GPS отчитане може да се счита за вярно?
@ -284,7 +284,7 @@ Azure Maps, услугата, която използвахте в послед
Отговорът е, че не може! Вместо това можете да дефинирате няколко отделни връзки за четене на събития, като всяка от тях управлява възпроизвеждането на непрочетените съобщения. Тесе наричат *групи на потребители*. Когато се свържете към крайна точка, можете да посочите към коя група на потребители искате да се свържете. Всеки компонент на вашето приложение ще се свърже към различна група на потребители.


Теоретично до 5 приложения могат да се свържат към всяка група на потребители и всички те ще получават съобщения, когато пристигнат. Най-добрата практика е само едно приложение да има достъп до всяка група на потребители, за да се избегне дублиране на обработката на съобщения и да се гарантира, че при рестартиране всички съобщения в опашката ще бъдат обработени правилно. Например, ако стартирате вашето Functions приложение локално, както и в облака, и двете ще обработват съобщения, което ще доведе до дублиране на данни в хранилището.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -38,7 +38,7 @@
С възхода на автоматизираното събиране, сортирането на продукцията се премести от събирането към фабриката. Храната се транспортира по дълги конвейерни ленти с екипи от хора, които премахват всичко, което не отговаря на изискваните стандарти за качество. Събирането стана по-евтино благодарение на машините, но все още имаше разходи за ръчно сортиране на храната.


Следващата еволюция беше използването на машини за сортиране, било то вградени в комбайна или в заводите за обработка. Първото поколение от тези машини използваше оптични сензори за откриване на цветове, контролирайки механизми за изхвърляне на зелени домати в кош за отпадъци с помощта на лостове или въздушни струи, оставяйки червените домати да продължат по мрежата от конвейерни ленти.
@ -62,7 +62,7 @@
> 🎓 Резултатите от ML моделите се наричат *предсказания*.


ML моделите не дават двоичен отговор, а вместо това дават вероятности. Например, модел може да получи снимка на банан и да предскаже `узрял`с 99.7% и `неузрял`с 0.3%. Вашият код би избрал най-доброто предсказание и би решил, че бананът е узрял.
@ -90,7 +90,7 @@ ML моделите не дават двоичен отговор, а вмест
Custom Vision е облачен инструмент за обучение на класификатори на изображения. Той ви позволява да обучите класификатор, използвайки само малък брой изображения. Можете да качвате изображения чрез уеб портал, уеб API или SDK, като давате на всяко изображение *етикет*, който представлява класификацията на това изображение. След това обучавате модела и го тествате, за да видите колко добре се представя. След като сте доволни от модела, можете да публикувате версии на него, които могат да бъдат достъпни чрез уеб API или SDK.


> 💁 Можете да обучите модел на Custom Vision с минимум 5 изображения на класификация, но повече е по-добре. Можете да получите по-добри резултати с поне 30 изображения.
@ -146,7 +146,7 @@ Custom Vision е част от набор от AI инструменти от Mi
Когато създавате проекта, уверете се, че използвате ресурса`fruit-quality-detector-training`, който създадохте по-рано. Използвайте тип проект *Classification*, тип класификация *Multiclass* и домейн *Food*.


✅ Отделете време, за да разгледате потребителския интерфейс на Custom Vision за вашия класификатор на изображения.
@ -164,7 +164,7 @@ Custom Vision е част от набор от AI инструменти от Mi
* Използвайки 2 узрели банана, направете няколко снимки на всеки от тях от различни ъгли, като направите поне 7 снимки (5 за обучение, 2 за тестване), но идеално повече.


* Повторете същия процес с 2 неузрели банана.
@ -174,7 +174,7 @@ Custom Vision е част от набор от AI инструменти от Mi
1. Следвайте [секцията за качване и етикетиране на изображения от бързото ръководство за създаване на класификатор в Microsoft документацията](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#upload-and-tag-images), за да качите вашите тренировъчни изображения. Етикетирайте узрелите плодове като `ripe`, а неузрелите като `unripe`.


1. Следвайте [секцията за обучение на класификатора от бързото ръководство за създаване на класификатор в Microsoft документацията](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#train-the-classifier), за да обучите класификатора на изображения върху качените от вас изображения.
@ -192,7 +192,7 @@ Custom Vision е част от набор от AI инструменти от Mi
1. Следвайте [документацията за тестване на вашия модел в Microsoft документацията](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/test-your-model?WT.mc_id=academic-17441-jabenn#test-your-model), за да тествате вашия класификатор на изображения. Използвайте тестовите изображения, които създадохте по-рано, а не някое от изображенията, които използвахте за обучение.


1. Опитайте всички тестови изображения, до които имате достъп, и наблюдавайте вероятностите.
# Проверка на качеството на плодове чрез IoT устройство


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -26,7 +26,7 @@
Сензорите на камери, както подсказва името, са камери, които можете да свържете към вашето IoT устройство. Те могат да правят статични изображения или да заснемат видео поток. Някои връщат сурови данни за изображения, а други компресират данните в файлове като JPEG или PNG. Обикновено камерите, които работят с IoT устройства, са много по-малки и с по-ниска резолюция от тези, с които сте свикнали, но можете да намерите камери с висока резолюция, които съперничат на най-добрите телефони. Можете да получите различни сменяеми обективи, многокамерни настройки, инфрачервени термални камери или UV камери.


Повечето сензори на камери използват сензори за изображения, където всеки пиксел е фотодиод. Обективът фокусира изображението върху сензора за изображения, а хиляди или милиони фотодиоди откриват светлината, падаща върху всеки от тях, и я записват като данни за пиксели.
@ -74,7 +74,7 @@
1. Изберете бутона **Publish** за итерацията.


1. В диалога *Publish Model* задайте *Prediction resource* на ресурса`fruit-quality-detector-prediction`, който създадохте в последния урок. Оставете името като `Iteration2` и изберете бутона **Publish**.
@ -88,7 +88,7 @@
Също така вземете копие на стойността *Prediction-Key*. Това е защитен ключ, който трябва да предадете, когато извиквате модела. Само приложения, които предават този ключ, имат право да използват модела, всички други приложения се отхвърлят.


✅ Когато се публикува нова итерация, тя ще има различно име. Как мислите, че бихте променили итерацията, която IoT устройството използва?
@ -109,7 +109,7 @@
За да получите най-добри резултати от класификатор на изображения, трябва да обучите модела с изображения, които са възможно най-близки до изображенията, използвани за предсказания. Ако сте използвали камерата на телефона си за заснемане на изображения за обучение, например, качеството на изображението, остротата и цветовете ще бъдат различни от камерата, свързана към IoT устройство.


На изображението по-горе снимката на банана отляво е направена с камера на Raspberry Pi, а тази отдясно е направена на същия банан на същото място с iPhone. Има забележима разлика в качеството - снимката с iPhone е по-ясна, с по-ярки цветове и повече контраст.
@ -16,7 +16,7 @@ Raspberry Pi се нуждае от камера.
### Задача - свържете камерата


1. Изключете захранването на Raspberry Pi.
@ -24,17 +24,17 @@ Raspberry Pi се нуждае от камера.
Можете да намерите анимация, показваща как да отворите клипса и да поставите кабела, в [документацията за започване с камерата на Raspberry Pi](https://projects.raspberrypi.org/en/projects/getting-started-with-picamera/2).


1. Свалете Grove Base Hat от Raspberry Pi.
1. Прекарайте лентовия кабел през отвора за камерата в Grove Base Hat. Уверете се, че синята страна на кабела е обърната към аналоговите портове, обозначени като **A0**, **A1** и т.н.


1. Поставете лентовия кабел в порта за камерата на Raspberry Pi. Отново издърпайте черния пластмасов клипс нагоре, поставете кабела и след това натиснете клипса обратно. Синята страна на кабела трябва да е обърната към USB и Ethernet портовете.


1. Поставете отново Grove Base Hat.
@ -101,7 +101,7 @@ Raspberry Pi се нуждае от камера.
Линията `camera.rotation = 0` задава ротацията на изображението. Лентовият кабел влиза в долната част на камерата, но ако камерата ви е завъртяна, за да улесни насочването към обекта, който искате да класифицирате, можете да промените тази линия на броя градуси на ротация.


Например, ако окачите лентовия кабел над нещо, така че да е в горната част на камерата, задайте ротацията на 180:
Ще можете да видите заснетото изображение, както и тези стойности в таба **Predictions** в Custom Vision.


> 💁 Можете да намерите този код в папката [code-classify/pi](../../../../../4-manufacturing/lessons/2-check-fruit-from-device/code-classify/pi) или [code-classify/virtual-iot-device](../../../../../4-manufacturing/lessons/2-check-fruit-from-device/code-classify/virtual-iot-device).
1. Изберете бутона **Add**, за да създадете камерата.


Камерата ще бъде създадена и ще се появи в списъка със сензори.
1. Конфигурирайте изображението, което камерата в CounterFit ще заснеме. Можете да зададете *Source* на *File*, след което да качите файл с изображение, или да зададете *Source* на *WebCam*, и изображенията ще бъдат заснемани от вашата уеб камера. Уверете се, че сте избрали бутона **Set**, след като изберете снимка или уеб камера.


1. Изображение ще бъде заснето и запазено като `image.jpg` в текущата папка. Ще видите този файл в Explorer на VS Code. Изберете файла, за да видите изображението. Ако е необходимо завъртане, актуализирайте реда `camera.rotation = 0`, както е необходимо, и направете нова снимка.
1. Пиновете в основата на ArduCam трябва да бъдат свързани към GPIO пиновете на Wio Terminal. За да е по-лесно да намерите правилните пинове, прикрепете стикера за GPIO пинове, който идва с Wio Terminal, около пиновете:
@ -35,7 +35,7 @@ ArduCam няма Grove конектор, вместо това се свързв
| SDA | 3 (I2C1_SDA) | I2C Сериен Данни |
| SCL | 5 (I2C1_SCL) | I2C Сериен Часовник |


Връзките GND и VCC осигуряват 5V захранване за ArduCam. Камерата работи на 5V, за разлика от Grove сензорите, които работят на 3V. Това захранване идва директно от USB-C връзката, която захранва устройството.
@ -456,7 +456,7 @@ Wio Terminal поддържа само microSD карти с капацитет
1. Изключете захранването на microSD картата и я извадете, като я натиснете леко и я освободите, и тя ще изскочи. Може да се наложи да използвате тънък инструмент за това. Поставете microSD картата във вашия компютър, за да прегледате изображенията.


💁 Може да отнеме няколко изображения, докато баланса на бялото на камерата се настрои. Ще забележите това по цвета на заснетите изображения, първите няколко може да изглеждат с неправилен цвят. Винаги можете да заобиколите това, като промените кода да заснеме няколко изображения, които се игнорират във функцията `setup`.
Ще можете да видите изображението, което е заснето, и тези стойности в раздела **Predictions** в Custom Vision.


> 💁 Можете да намерите този код в папката [code-classify/wio-terminal](../../../../../4-manufacturing/lessons/2-check-fruit-from-device/code-classify/wio-terminal).


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -33,11 +33,11 @@
Edge изчисленията включват използването на компютри, които обработват IoT данни възможно най-близо до мястото, където се генерират данните. Вместо тази обработка да се извършва в облака, тя се премества към ръба на облака - вашата вътрешна мрежа.


В досегашните уроци вашите устройства събираха данни и ги изпращаха в облака за анализ, като стартираха безсървърни функции или AI модели в облака.


Edge изчисленията включват преместване на някои от облачните услуги извън облака и върху компютри, работещи в същата мрежа като IoT устройствата, като се комуникира с облака само при необходимост. Например, можете да стартирате AI модели на edge устройства, за да анализирате зрелостта на плодовете, и да изпращате в облака само аналитични данни, като броя на узрелите спрямо неузрелите плодове.
@ -85,7 +85,7 @@ Edge изчисленията включват преместване на ня
## Azure IoT Edge


Azure IoT Edge е услуга, която може да ви помогне да преместите работни натоварвания извън облака и към edge. Настройвате устройство като edge устройство и от облака можете да разполагате код на това edge устройство. Това ви позволява да комбинирате възможностите на облака и edge.
@ -99,7 +99,7 @@ IoT Edge е вграден в IoT Hub, така че можете да упра
IoT Edge стартира код от *контейнери* - самостоятелни приложения, които се изпълняват изолирано от останалите приложения на вашия компютър. Когато стартирате контейнер, той действа като отделен компютър, работещ във вашия компютър, със собствен софтуер, услуги и приложения. В повечето случаи контейнерите не могат да достъпят нищо на вашия компютър, освен ако не изберете да споделите неща като папка с контейнера. Контейнерът след това излага услуги чрез отворен порт, към който можете да се свържете или да го изложите на вашата мрежа.


Например, можете да имате контейнер суеб сайт, работещ на порт 80, който е стандартният HTTP порт, и след това да го изложите от вашия компютър също на порт 80.
@ -196,11 +196,11 @@ IoT Edge стартира код от *контейнери* - самостоя
## Подгответе контейнера си за разгръщане


След като изтеглите модела си, той трябва да бъде създаден като контейнер и качен в регистър на контейнери - онлайн място, където можете да съхранявате контейнери. IoT Edge може след това да изтегли контейнера от регистъра и да го разгръща на вашето устройство.


Регистърът на контейнери, който ще използвате за този урок, е Azure Container Registry. Това не е безплатна услуга, затова, за да спестите пари, се уверете, че [почиствате проекта си](../../../clean-up.md), след като приключите.
Горната диаграма показва някои от компонентите и услугите, разгледани досега в тези уроци, и как те се свързват в референтна IoT архитектура.
@ -89,7 +89,7 @@ IoT приложенията могат да бъдат описани като
### Прототипиране на вашето приложение


Горната диаграма показва референтна архитектура за това прототипно приложение.
@ -124,7 +124,7 @@ IoT устройството се нуждае от някакъв тригер,
Прототипният детектор на плодове има множество компоненти, които комуникират помежду си.


* Сензор за близост, който измерва разстоянието до плод и изпраща това към IoT Hub
* Командата за управление на камерата, идваща от IoT Hub към устройството с камера
@ -20,7 +20,7 @@ Raspberry Pi се нуждае от сензор за близост.
Свържете сензора за измерване на разстояние.


1. Поставете единия край на Grove кабела в конектора на сензора за измерване на разстояние. Той ще влезе само в една посока.
1. Натиснете бутона **Add**, за да създадете сензора за разстояние.


Сензорът за разстояние ще бъде създаден и ще се появи в списъка със сензори.


@ -20,7 +20,7 @@ Grove Time of Flight сензорът може да бъде свързан къ
Свържете сензора за разстояние.


1. Поставете единия край на Grove кабела в конектора на сензора за разстояние. Кабелът може да бъде поставен само в една посока.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -36,7 +36,7 @@
Класификацията на изображения се отнася до класифициране на изображението като цяло – каква е вероятността цялото изображение да съответства на всеки етикет. Получавате вероятности за всеки етикет, използван за обучение на модела.


В горния пример две изображения са класифицирани с помощта на модел, обучен да класифицира кутии с кашу или консерви с доматено пюре. Първото изображение е кутия с кашу и има следните резултати от класификатора:
@ -60,7 +60,7 @@
> 🎓 *Ограничителни кутии*са кутиите около обект.


Горното изображение съдържа както кутия с кашу, така и три консерви с доматено пюре. Детекторът за обекти е открил кашуто, връщайки ограничителната кутия, която съдържа кашуто, с вероятност от 97.6%. Детекторът за обекти също е открил три консерви с доматено пюре и предоставя три отделни ограничителни кутии – по една за всяка открита консерва, като всяка има процентна вероятност, че ограничителната кутия съдържа консерва с доматено пюре.
@ -111,7 +111,7 @@
Когато създавате проекта, уверете се, че използвате ресурса`stock-detector-training`, който създадохте по-рано. Изберете тип проект *Object Detection* и домейн *Products on Shelves*.


✅ Домейнът "Продукти на рафтове" е специално насочен към разпознаване на наличности на рафтовете в магазините. Прочетете повече за различните домейни в [документацията за избор на домейн в Microsoft Docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/select-domain?WT.mc_id=academic-17441-jabenn#object-detection)
@ -133,11 +133,11 @@
1. Следвайте [секцията "Качване и маркиране на изображения" от ръководството за бърз старт за изграждане на детектор за обекти в Microsoft Docs](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/get-started-build-detector?WT.mc_id=academic-17441-jabenn#upload-and-tag-images), за да качите вашите тренировъчни изображения. Създайте подходящи етикети в зависимост от типовете обекти, които искате да разпознавате.


Когато рисувате ограничителни кутии за обекти, дръжте ги плътно около обекта. Това може да отнеме известно време, за да очертаете всички изображения, но инструментът ще открие какво смята за ограничителни кутии, което ще ускори процеса.


> 💁 Ако имате повече от 15 изображения за всеки обект, можете да обучите модела след първите 15 и след това да използвате функцията **Suggested tags**. Тя ще използва обучен модел, за да разпознае обектите в немаркираните изображения. Можете след това да потвърдите откритите обекти или да отхвърлите и прерисувате ограничителните кутии. Това може да спести *много* време.
@ -155,7 +155,7 @@
1. Използвайте бутона **Quick Test**, за да качите тестови изображения и да проверите дали обектите са разпознати. Използвайте тестовите изображения, които създадохте по-рано, а не тези, които използвахте за обучение.


1. Изпробвайте всички тестови изображения, с които разполагате, и наблюдавайте вероятностите.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -62,7 +62,7 @@
1. Натиснете бутона **Publish** за итерацията.


1. В диалога *Publish Model* задайте *Prediction resource* на ресурса`stock-detector-prediction`, който създадохте в последния урок. Оставете името като `Iteration2` и натиснете бутона **Publish**.
@ -76,7 +76,7 @@
Също така вземете копие на стойността *Prediction-Key*. Това е защитен ключ, който трябва да предадете, когато извиквате модела. Само приложения, които предават този ключ, имат право да използват модела, всички други приложения се отхвърлят.


✅ Когато се публикува нова итерация, тя ще има различно име. Как мислите, че бихте променили итерацията, която IoT устройството използва?
@ -95,7 +95,7 @@
Резултатите от предсказание в раздела **Predictions** в Custom Vision имат ограничителните кутии, начертани върху изображението, което е изпратено за предсказание.


На изображението по-гореса открити 4 консерви доматено пюре. В резултатите червен квадрат е наложен върху всяко открито изображение, показвайки ограничителната кутия за изображението.
@ -103,7 +103,7 @@
Ограничителните кутии се определят с 4 стойности - горна, лява, височина и ширина. Тези стойности са в мащаб от 0-1, представляващи позициите като процент от размера на изображението. Началната точка (позиция 0,0) е горният ляв ъгъл на изображението, така че горната стойност е разстоянието от горната част, а долната част на ограничителната кутия е горната плюс височината.


Горното изображение е 600 пиксела широко и 800 пиксела високо. Ограничителната кутия започва на 320 пиксела надолу, давайки горна координата от 0.4 (800 x 0.4 = 320). Отляво, ограничителната кутия започва на 240 пиксела, давайки лява координата от 0.4 (600 x 0.4 = 240). Височината на ограничителната кутия е 240 пиксела, давайки стойност за височина от 0.3 (800 x 0.3 = 240). Ширината на ограничителната кутия е 120 пиксела, давайки стойност за ширина от 0.2 (600 x 0.2 = 120).
@ -118,7 +118,7 @@
Можете да използвате ограничителните кутии, комбинирани с вероятностите, за да оцените колко точно е откриването. Например, детекторът на обекти може да открие множество обекти, които се припокриват, например откриване на една консерва вътре в друга. Вашият код може да разгледа ограничителните кутии, да разбере, че това е невъзможно, и да игнорира всички обекти, които имат значително припокриване с други обекти.
В горния пример една ограничителна кутия показва предсказана консерва доматено пюре с вероятност 78.3%. Втора ограничителна кутия е малко по-малка и е вътре в първата ограничителна кутия с вероятност 64.3%. Вашият код може да провери ограничителните кутии, да види, че те се припокриват напълно, и да игнорира по-ниската вероятност, тъй като няма начин една консерва да бъде вътре в друга.
Ще можете да видите заснетото изображение и тези стойности в раздела **Predictions** в Custom Vision.


> 💁 Можете да намерите този код в папката [code-detect/pi](../../../../../5-retail/lessons/2-check-stock-device/code-detect/pi) или [code-detect/virtual-iot-device](../../../../../5-retail/lessons/2-check-stock-device/code-detect/virtual-iot-device).
Ще можете да видите заснетото изображение и тези стойности в раздела **Predictions** в Custom Vision.


> 💁 Можете да намерите този код в папката [code-detect/wio-terminal](../../../../../5-retail/lessons/2-check-stock-device/code-detect/wio-terminal).


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -51,7 +51,7 @@
Динамичните микрофони не се нуждаят от захранване, за да работят – електрическият сигнал се създава изцяло от микрофона.


* Лентови - Лентовите микрофони са подобни на динамичните, но вместо диафрагма имат метална лента. Тази лента се движи в магнитно поле, генерирайки електрически ток. Както и динамичните микрофони, лентовите не се нуждаят от захранване.
@ -59,11 +59,11 @@
* Кондензаторни - Кондензаторните микрофони имат тънка метална диафрагма и фиксирана метална задна плоча. Електричество се прилага към двете, и когато диафрагмата вибрира, статичният заряд между плочите се променя, генерирайки сигнал. Кондензаторните микрофони се нуждаят от захранване, наречено *Phantom power*.


* MEMS - Микроелектромеханичните системи микрофони, или MEMS, са микрофони на чип. Те имат чувствителна на налягане диафрагма, гравирана върху силициев чип, и работят подобно на кондензаторен микрофон. Тези микрофони могат да бъдат изключително малки и интегрирани в електронни схеми.


На изображението по-горе, чипът с надпис **LEFT**е MEMS микрофон с миниатюрна диафрагма, по-малка от милиметър.
@ -159,7 +159,7 @@
## Преобразуване на реч в текст


Точно както при класификацията на изображения в по-ранен проект, съществуват предварително изградени AI услуги, които могат да приемат реч като аудио файл и да я преобразуват в текст. Една такава услуга е Speech Service, част от Cognitive Services, предварително изградени AI услуги, които можете да използвате в своите приложения.
1. Поставете единия край на Grove кабела в гнездото на модулa на бутона. Кабелът може да бъде поставен само в една посока.
1. С изключен Raspberry Pi, свържете другия край на Grove кабела към цифровото гнездо, маркирано **D5** на Grove базовия HAT, прикрепен към Pi. Това гнездо е второто отляво, на реда с гнезда до GPIO пиновете.


@ -34,7 +34,7 @@ Raspberry Pi има 3.5мм жак за слушалки. Можете да го
1. Ако използвате ReSpeaker 2-Mics Pi HAT, можете да премахнете Grove базовата платка и да поставите ReSpeaker платката на нейно място.


По-късно в урока ще ви е необходим бутон Grove, но такъв е вграден в тази платка, така че Grove базовата платка не е необходима.
✅ Прочетете повече за DMA на [страницата за директен достъп до паметта в Wikipedia](https://wikipedia.org/wiki/Direct_memory_access).


DMAC може да записва аудио от ADC на фиксирани интервали, например 16 000 пъти в секунда за аудио на 16KHz. Той може да записва тези данни в предварително зададен паметен буфер, а когато този буфер се запълни, да го направи достъпен за обработка от вашия код. Използването на тази памет може да забави записването на аудио, но можете да настроите множество буфери. DMAC записва в буфер 1, след което, когато той се запълни, уведомява вашия код да обработи буфер 1, докато DMAC записва в буфер 2. Когато буфер 2 се запълни, той уведомява вашия код и се връща към записване в буфер 1. По този начин, стига да обработвате всеки буфер за по-малко време, отколкото е необходимо за запълването му, няма да загубите данни.


> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -46,7 +46,7 @@
## Създаване на модел за разбиране на езика


Можете да създавате модели за разбиране на езика, използвайки LUIS, услуга за разбиране на езика от Microsoft, която е част от Cognitive Services.
@ -169,7 +169,7 @@
1. Докато въвеждате всеки пример, LUIS ще започне да разпознава обекти и ще ги подчертава и етикетира.




> Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
@ -74,7 +74,7 @@
### Услуга за реч на Cognitive Services


Услугата за реч, която използвахте в последните няколко урока, има възможности за превод при разпознаване на реч. Когато разпознавате реч, можете да поискате не само текста на речта на същия език, но и на други езици.
@ -82,7 +82,7 @@
### Услуга за превод на Cognitive Services


Услугата Translator е специализирана услуга за превод, която може да превежда текст от един език на един или повече целеви езици. Освен превод, тя поддържа широк набор от допълнителни функции, включително филтриране на нецензурни думи. Тя също така ви позволява да предоставите конкретен превод за определена дума или изречение, за да работите с термини, които не искате да бъдат превеждани, или да имате специфичен, добре познат превод.
@ -25,7 +25,7 @@ REST API на услугата за реч не поддържа директн
>
> Например, ако обучите LUIS на английски, но искате да използвате френски като език на потребителя, можете да преведете изречения като "set a 2 minute and 27 second timer" от английски на френски с помощта на Bing Translate, след което да използвате бутона **Listen translation**, за да изговорите превода в микрофона си.
>
> 
> 
1. Добавете API ключа за преводача под `speech_api_key`:
> Например, ако обучите LUIS на английски, но искате да използвате френски като език на потребителя, можете да преведете изречения като "set a 2 minute and 27 second timer" от английски на френски с Bing Translate, след това използвайте бутона **Listen translation**, за да говорите превода в микрофона си.
>
> 
> 
1. Заменете декларациите `recognizer_config` и `recognizer` със следното:
@ -105,7 +105,7 @@ REST API на услугата за реч не поддържа директн
>
> Например, ако обучите LUIS на английски, но искате да използвате френски като език на потребителя, можете да преведете изречения като "set a 2 minute and 27 second timer" от английски на френски, използвайки Bing Translate, след което да използвате бутона **Listen translation**, за да произнесете превода в микрофона си.
>
> 
> 
1. Добавете API ключа и местоположението на услугата за превод под `SPEECH_LOCATION`:
### Присъединете се към общността Azure AI Foundry
Ако попаднете в затруднение или имате въпроси относно създаването на AI приложения. Присъединете се към съученици и опитни разработчици в дискусии за MCP. Това е подкрепяща общност, където въпросите са добре дошли и знанията се споделят свободно.
Ако заседнете или имате въпроси относно изграждането на AI приложения. Присъединете се към други учащи и опитни разработчици в дискусии за MCP. Това е подкрепяща общност, където въпросите са добре дошли и знанията се споделят свободно.
Ако имате обратна връзка за продукта или грешки при разработка, посетете:
#### Поддържа се чрез GitHub Action (автоматично и винаги актуално)
> **Предпочитате да клонирате локално?**
> Това хранилище включва над 50 езикови превода, което значително увеличава размера на изтеглянето. За да клонирате без преводите, използвайте sparse checkout:
> git sparse-checkout set --no-cone '/*' '!translations' '!translated_images'
> ```
> Това ви дава всичко необходимо за завършване на курса с много по-бързо изтегляне.
<!-- CO-OP TRANSLATOR LANGUAGES TABLE END -->
>
> Това хранилище включва преводи на повече от 50 езика, което значително увеличава размера на изтегляне. За да клонирате без преводи, използвайте sparse checkout:
>
> **Bash / macOS / Linux:**
>
> **CMD (Windows):**
>
> Така ще получите всичко необходимо, за да завършите курса с много по-бързо изтегляне.
# IoT за начинаещи - учебна програма
Експертите по Azure Cloud в Microsoft с удоволствие предлагат 12-седмична учебна програма с 24 урока, посветени на основите на IoT. Всеки урок включва преди и след урока тестове, писмени инструкции за завършване на урока, решение, задача и още. Нашата проектно ориентирана педагогика ви позволява да учите чрез създаване, доказан метод за по-добро усвояване на нови умения.
Адвокатите на Azure Cloud в Microsoft с удоволствие предлагат 12-седмична учебна програма с 24 урока, посветени на основите на IoT. Всеки урок включва предварителен и последващ тест, писмени инструкции за изпълнение на урока, решение, задание и още. Нашата проектно-базирана педагогика ви позволява да учите чрез изграждане, което е доказан начин новите умения да „забият“.
Проектите покриват пътя на храната от фермата до масата. Това включва земеделие, логистика, производство, търговия на дребно и потребители - всички популярни индустриални области за IoT устройства.
Проектите покриват пътуването на храната от фермата до трапезата. Това включва земеделие, логистика, производство, търговия на дребно и потребители - всички популярни индустриални области за IoT устройства.

> Скетчнот от [Nitya Narasimhan](https://github.com/nitya). Натиснете изображението за по-голяма версия.
> Скетчнот от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия.
**Сърдечни благодарности на нашите автори [Jen Fox](https://github.com/jenfoxbot), [Jen Looper](https://github.com/jlooper), [Jim Bennett](https://github.com/jimbobbennett) и на нашия скетчнот артист [Nitya Narasimhan](https://github.com/nitya).**
**Сърдечни благодарности на нашите автори [Jen Fox](https://github.com/jenfoxbot), [Jen Looper](https://github.com/jlooper), [Jim Bennett](https://github.com/jimbobbennett) и нашата скетчнот артистка [Nitya Narasimhan](https://github.com/nitya).**
**Благодарности и на екипа ни от [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn), които преглеждат и превеждат тази учебна програма - [Aditya Garg](https://github.com/AdityaGarg00), [Anurag Sharma](https://github.com/Anurag-0-1-A), [Arpita Das](https://github.com/Arpiiitaaa), [Aryan Jain](https://www.linkedin.com/in/aryan-jain-47a4a1145/), [Bhavesh Suneja](https://github.com/EliteWarrior315), [Faith Hunja](https://faithhunja.github.io/), [Lateefah Bello](https://www.linkedin.com/in/lateefah-bello/), [Manvi Jha](https://github.com/Severus-Matthew), [Mireille Tan](https://www.linkedin.com/in/mireille-tan-a4834819a/), [Mohammad Iftekher (Iftu) Ebne Jalal](https://github.com/Iftu119), [Mohammad Zulfikar](https://github.com/mohzulfikar), [Priyanshu Srivastav](https://www.linkedin.com/in/priyanshu-srivastav-b067241ba), [Thanmai Gowducheruvu](https://github.com/innovation-platform) и [Zina Kamel](https://www.linkedin.com/in/zina-kamel/).**
**Благодарим също на нашия екип от [Студентски посланици на Microsoft Learn](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn), които преглеждаха и превеждаха тази учебна програма - [списък с имена].**
> 🎥 Натиснете изображението по-горе за видео за проекта!
> 🎥 Кликнете върху изображението по-горе за видео за проекта!
> **Учители**, ние сме [включили някои предложения](for-teachers.md) как да използвате тази учебна програма. Ако искате да създадете свои уроци, ние също сме включили [шаблон за урок](lesson-template/README.md).
> **Учители**, включихме [някои предложения](for-teachers.md) как да използвате тази учебна програма. Ако желаете да създадете свои собствени уроци, ние сме включили и [шаблон за урок](lesson-template/README.md).
> **Студенти**, за да използвате тази учебна програма самостоятелно, форкнете целия репозиторий и изпълнете упражненията сами, започвайки с предварителен тест, след това четете лекцията и завършете останалите дейности. Опитайте се да създадете проектите чрез разбиране на уроците, а не чрез копиране на кода за решение; този код е наличен в папките /solutions във всеки урок, ориентиран към проект. Друга идея е да сформирате учебна група с приятели и да преминете заедно през съдържанието. За по-нататъшно обучение препоръчваме [Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn).
> **Студенти** ([страница за студенти](https://aka.ms/student-page)), за да използвате тази учебна програма самостоятелно, форкнете цялото хранилище и изпълнявайте задачите сами, започвайки с тест преди лекцията, след това четете лекцията и изпълнявайте останалите дейности. Опитайте се да създадете проектите, като разберете уроците, вместо да копирате кода на решенията; този код обаче е наличен в папките /solutions в всеки урок, ориентиран към проект. Друга идея е да формирате учебна група с приятели и да преминете съдържанието заедно. За допълнително обучение препоръчваме [Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn).
За видео преглед на този курс, разгледайте това видео:
> 🎥 Кликнете върху изображението по-горе за видео за проекта!
> 🎥 Натиснете изображението по-горе за видео за проекта!
## Педагогика
Избрахме две педагогически главни принципа при изграждането на тази учебна програма: да е проектно ориентирана и да включва чести тестове. Към края на серията студентите ще са изградили система за мониторинг и поливане на растения, проследяване на превозни средства, умен фабричен комплекс за проследяване и проверка на хранителни продукти и гласово контролирана кухненска таймер, и ще са научили основите на Интернет на нещата, включително как да пишат код за устройства, да се свързват с облака, да анализират телеметрия и да изпълняват изкуствен интелект на ръба.
Ние избрахме два педагогически принципа при изграждането на тази учебна програма: да бъде проектно-базирана и да включва чести тестове. В края на тази серия студентите ще са изградили система за наблюдение и поливане на растения, проследяващо устройство за превозно средство, интелигентна фабрична система за проследяване и проверка на храна и гласово управляван таймер за готвене, както и ще са научили основите на Интернет на нещата, включително писане на код за устройства, свързване с облака, анализ на телеметрия и изпълнение на ИИ на ръба.
Чрез гарантиране, че съдържанието е свързано с проекти, процесът става по-ангажиращ за студентите и задържането на концепции се увеличава.
Като осигуряваме съдържанието да бъде свързано с проекти, процесът става по-интересен за студентите и задържането на концепции се увеличава.
Освен това, ниско риска тест преди занятие насочва вниманието на студента към изучаване на тема, докато втори тест след занятието гарантира допълнително задържане. Тази учебна програма е проектирана да бъде гъвкава и забавна и може да се следва изцяло или частично. Проектите започват малки и стават все по-сложни към края на 12-седмичния цикъл.
Освен това, тест с нисък риск преди урока насочва вниманието на студента към изучавания предмет, а последващ тест след урока осигурява допълнително задържане на знания. Тази учебна програма е създадена да бъде гъвкава и забавна и може да се вземе изцяло или на части. Проектите започват малки и стават все по-сложни до края на 12-седмичния цикъл.
Всеки проект е базиран на реален хардуер, достъпен за студенти и любители. Всеки проект разглежда конкретната проектна област, предоставяйки релевантни познания. За да станете успешен разработчик, е полезно да разбирате домейна, в който решавате проблеми, като това ви позволява да мислите за IoT решенията и наученото в контекста на реалния проблем, който може да ви бъде поставен като IoT разработчик. Студентите научават "защо" на решенията, които създават, и получават оценка към крайния потребител.
Всеки проект е базиран на реален хардуер, достъпен за студенти и любители. Всеки проект разглежда специфичния проектен домейн, като предоставя релевантни фонови знания. За да бъдете успешен разработчик, помага да разберете домейна, в който решавате проблеми, а предоставянето на тези знания позволява на студентите да мислят за IoT решенията и наученото в контекста на реалния проблем, който може да им бъде възложен като разработчици на IoT. Студентите научават „защо“ на решенията, които изграждат, и получават appreciation за крайния потребител.
## Хардуер
Имаме два варианта IoT хардуер за използване в проектите в зависимост от личните предпочитания, познанията или предпочитанията към програмен език, учебните цели и наличността. Също така сме предоставили виртуална хардуерна версия за тези, които нямат достъп до хардуер или искат да научат повече, преди да се ангажират с покупка. Можете да прочетете повече и да намерите "списък за пазаруване" на [hardware page](./hardware.md), включително връзки за закупуване на цялостни комплекти от нашите приятели в Seeed Studio.
Имаме два варианта за IoT хардуер за проектите в зависимост от личните предпочитания, познания по програмни езици, учебни цели и наличност. Предоставили сме и "виртуален хардуер" за тези, които нямат достъп до хардуер или искат да научат повече преди да се ангажират с покупка. Можете да прочетете повече и да намерите "списък за пазаруване" на [страницата за хардуер](./hardware.md), включително връзки за закупуване на пълни комплекти от нашите приятели в Seeed Studio.
> 💁 Намерете нашите [Правила за поведение](CODE_OF_CONDUCT.md), [Указания за принос](CONTRIBUTING.md) и [Указания за превод](TRANSLATIONS.md). Очакваме вашата конструктивна обратна връзка!
> 💁 Намерете нашите насоки за [Code of Conduct](CODE_OF_CONDUCT.md), [Contributing](CONTRIBUTING.md) и [Translation](TRANSLATIONS.md). Очакваме вашите конструктивни отзиви!
>
> 🔧 Имаш проблеми? Вижте нашето [Ръководство за отстраняване на неизправности](TROUBLESHOOTING.md) за решения на често срещани проблеми.
> 🔧 Имаш проблем? Вижте нашия [Troubleshooting Guide](TROUBLESHOOTING.md) за решения на често срещани проблеми.
## Всяка лекция включва:
## Всяко уроци включва:
- скичнот
- опционално допълнително видео
- предварително задание за разгряване преди урока
- скицник
- по избор допълнително видео
- предварителен тест за загряване преди урока
- писмен урок
- за уроци, базирани на проекти, стъпка по стъпка ръководства за изграждане на проекта
- за уроци, базирани на проект, ръководства стъпка по стъпка за изграждане на проекта
- [тест след урока](https://ff-quizzes.netlify.app/en/)
> **Бележка относно тестовете**: Всички тестове се намират в папката quiz-app, общо 48 теста с по три въпроса във всеки. Теса свързани в рамките на уроците, но приложението за тестове може да се стартира локално или да се разположи в Azure; следвайте инструкциите в папката `quiz-app`. Те постепенно се локализират.
> **Бележка относно тестовете**: Всички тестове се намират в папката quiz-app, общо 48 теста с по три въпроса всеки. Теса свързани от уроците, но приложението за тестове може да се стартира локално или да се разположи в Azure; следвайте инструкциите в папката `quiz-app`. Постепенно се локализират.
## Уроци
| | Име на проекта | Преподавани концепции | Учебни цели | Свързан урок |
| 01 | [Стартиране](./1-getting-started/README.md) | Въведение в IoT | Научете основните принципи на IoT и основните градивни елементи на IoT решения като сензори и облачни услуги, докато настройвате първото си IoT устройство | [Въведение в IoT](./1-getting-started/lessons/1-introduction-to-iot/README.md) |
| 02 | [Стартиране](./1-getting-started/README.md) | По-задълбочено в IoT | Научете повече за компонентите на IoT система, както и за микроконтролерите и едноплатковите компютри | [По-задълбочено в IoT](./1-getting-started/lessons/2-deeper-dive/README.md) |
| 03 | [Стартиране](./1-getting-started/README.md) | Взаимодействие с физическия свят чрез сензори и изпълнителни механизми | Научете за сензори за събиране на данни от физическия свят и изпълнителни механизми за изпращане на обратна връзка, докато изграждате нощна лампа | [Взаимодействие с физическия свят чрез сензори и изпълнителни механизми](./1-getting-started/lessons/3-sensors-and-actuators/README.md) |
| 04 | [Стартиране](./1-getting-started/README.md) | Свържете устройството си синтернет | Научете как да свържете IoT устройство с интернет, за да изпраща и получава съобщения чрез свързване на нощната лампа с MQTT брокер | [Свържете устройството си с интернет](./1-getting-started/lessons/4-connect-internet/README.md) |
| 05 | [Ферма](./2-farm/README.md) | Предсказване на растежа на растения | Научете как да предсказвате растежа на растения, използвайки данни за температура, събрани от IoT устройство | [Предсказване на растежа на растения](./2-farm/lessons/1-predict-plant-growth/README.md) |
| 06 | [Ферма](./2-farm/README.md) | Откриване на влажност на почвата | Научете как да откриете влажност на почвата и да калибрирате сензор за влажност на почвата | [Откриване на влажност на почвата](./2-farm/lessons/2-detect-soil-moisture/README.md) |
| 07 | [Ферма](./2-farm/README.md) | Автоматизирано поливане на растения | Научете как да автоматизирате и таймвате поливането с помощта на реле и MQTT | [Автоматизирано поливане на растения](./2-farm/lessons/3-automated-plant-watering/README.md) |
| 08 | [Ферма](./2-farm/README.md) | Преместване на растението в облака | Научете за облака и хостваните в облака IoT услуги и как да свържете вашето растение с някоя от тях вместо публичен MQTT брокер | [Преместване на растението в облака](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md) |
| 09 | [Ферма](./2-farm/README.md) | Преместване на логиката на приложението в облака | Научете как да пишете логика на приложението в облака, която реагира на IoT съобщения | [Преместване на логиката на приложението в облака](./2-farm/lessons/5-migrate-application-to-the-cloud/README.md) |
| 10 | [Ферма](./2-farm/README.md) | Поддържайте вашето растение защитено | Научете за сигурността в IoT и как да запазите вашето растение защитено с ключове и сертификати | [Поддържайте вашето растение защитено](./2-farm/lessons/6-keep-your-plant-secure/README.md) |
| 11 | [Транспорт](./3-transport/README.md) | Локационно проследяване | Научете за GPS проследяване на местоположението на IoT устройства | [Локационно проследяване](./3-transport/lessons/1-location-tracking/README.md) |
| 12 | [Транспорт](./3-transport/README.md) | Съхранение на данни за местоположение | Научете как да съхранявате IoT данни, за да бъдат визуализирани или анализирани по-късно | [Съхранение на данни за местоположение](./3-transport/lessons/2-store-location-data/README.md) |
| 13 | [Транспорт](./3-transport/README.md) | Визуализиране на данни за местоположение | Научете за визуализирането на данни за местоположение на карта и как картите представят реалния 3D свят в 2 измерения | [Визуализиране на данни за местоположение](./3-transport/lessons/3-visualize-location-data/README.md) |
| 14 | [Транспорт](./3-transport/README.md) | Геозони | Научете за геозони и как те могат да се използват за предупреждение, когато превозни средства в складската верига са близо до дестинацията им | [Геозони](./3-transport/lessons/4-geofences/README.md) |
| 15 | [Производство](./4-manufacturing/README.md) | Обучение на детектор за качество на плодове | Научете как да обучите класификатор на изображения в облака за откриване на качеството на плодове | [Обучение на детектор за качество на плодове](./4-manufacturing/lessons/1-train-fruit-detector/README.md) |
| 16 | [Производство](./4-manufacturing/README.md) | Проверка на качеството на плодове с IoT устройство | Научете за използването на вашия детектор за качество на плодове от IoT устройство | [Проверка на качеството на плодове с IoT устройство](./4-manufacturing/lessons/2-check-fruit-from-device/README.md)|
| 17 | [Производство](./4-manufacturing/README.md) | Стартиране на детектора за плодове в периферията | Научете как да стартирате вашия детектор за плодове на IoT устройство на ръба | [Стартиране на детектора за плодове в периферията](./4-manufacturing/lessons/3-run-fruit-detector-edge/README.md) |
| 18 | [Производство](./4-manufacturing/README.md) | Стартиране на откриване на качество на плодове от сензор | Научете за стартирането на откриване на качеството на плодове от сензор | [Стартиране на откриване на качество на плодове от сензор](./4-manufacturing/lessons/4-trigger-fruit-detector/README.md)|
| 19 | [Търговия](./5-retail/README.md) | Обучение на детектор на наличности | Научете как да използвате откриване на обекти за обучение на детектор за наличности за преброяване на стоки в магазин | [Обучение на детектор на наличности](./5-retail/lessons/1-train-stock-detector/README.md) |
| 20 | [Търговия](./5-retail/README.md) | Проверка на наличностите с IoT устройство | Научете как да проверявате наличностите с IoT устройство, използвайки модел за откриване на обекти | [Проверка на наличности с IoT устройство](./5-retail/lessons/2-check-stock-device/README.md) |
| 21 | [Потребител](./6-consumer/README.md) | Разпознаване на реч с IoT устройство | Научете как да разпознавате реч от IoT устройство, за да изградите умен таймер | [Разпознаване на реч с IoT устройство](./6-consumer/lessons/1-speech-recognition/README.md) |
| 22 | [Потребител](./6-consumer/README.md) | Разбиране на език | Научете как да разбирате изречения, говорени към IoT устройство | [Разбиране на език](./6-consumer/lessons/2-language-understanding/README.md) |
| 23 | [Потребител](./6-consumer/README.md) | Настройване на таймер и предоставяне на устна обратна връзка | Научете как да настроите таймер на IoT устройство и да давате устна обратна връзка кога таймерът е зададен и кога свършва | [Настройване на таймер и устна обратна връзка](./6-consumer/lessons/3-spoken-feedback/README.md) |
| 24 | [Потребител](./6-consumer/README.md) | Поддръжка на няколко езика | Научете как да поддържате няколко езика, както говоримите към устройството, така и отговорите от умния таймер | [Поддръжка на няколко езика](./6-consumer/lessons/4-multiple-language-support/README.md) |
## Достъп офлайн
Можете да използвате тази документация офлайнс помощта на [Docsify](https://docsify.js.org/#/). Клонирайте това хранилище, [инсталирайте Docsify](https://docsify.js.org/#/quickstart) на вашата локална машина, и след това в кореновата папка на това хранилище изпълнете `docsify serve`. Уебсайтът ще бъде обслужван на порт 3000 на вашия localhost: `localhost:3000`.
| | Име на проекта | Преподавани концепции | Цели на обучението | Свързан урок |
| 01 | [Getting started](./1-getting-started/README.md) | Въведение в IoT | Научете основните принципи на IoT и основните блокове на IoT решения като сензори и облачни услуги, докато настройвате първото си IoT устройство | [Introduction to IoT](./1-getting-started/lessons/1-introduction-to-iot/README.md) |
| 02 | [Getting started](./1-getting-started/README.md) | По-задълбочено в IoT | Научете повече за компонентите на IoT системата, както и за микроконтролери и едноплаткови компютри | [A deeper dive into IoT](./1-getting-started/lessons/2-deeper-dive/README.md) |
| 03 | [Getting started](./1-getting-started/README.md) | Взаимодействие с физическия свят чрез сензори и активатори | Научете за сензори за събиране на данни от физическия свят и за активатори за издаване на обратна връзка, докато изграждате нощна лампа | [Interact with the physical world with sensors and actuators](./1-getting-started/lessons/3-sensors-and-actuators/README.md) |
| 04 | [Getting started](./1-getting-started/README.md) | Свържете устройството си сИнтернет | Научете как да свържете IoT устройство с Интернет, за да изпращате и получавате съобщения, като свързвате нощната си лампа с MQTT брокер | [Connect your device to the Internet](./1-getting-started/lessons/4-connect-internet/README.md) |
| 05 | [Farm](./2-farm/README.md) | Предсказване на растежа на растения | Научете как да предсказвате растежа на растения, използвайки температурни данни, събрани от IoT устройство | [Predict plant growth](./2-farm/lessons/1-predict-plant-growth/README.md) |
| 06 | [Farm](./2-farm/README.md) | Откриване на влажност на почвата | Научете как да откривате влажност на почвата и да калибрирате сензор за влажност на почва | [Detect soil moisture](./2-farm/lessons/2-detect-soil-moisture/README.md) |
| 07 | [Farm](./2-farm/README.md) | Автоматизирано поливане на растения | Научете как да автоматизирате и отложите поливането, използвайки реле и MQTT | [Automated plant watering](./2-farm/lessons/3-automated-plant-watering/README.md) |
| 08 | [Farm](./2-farm/README.md) | Мигрирайте растението си в облака | Научете за облака и хостваните в облака IoT услуги и как да свържете растението си към тях вместо към публичен MQTT брокер | [Migrate your plant to the cloud](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md) |
| 09 | [Farm](./2-farm/README.md) | Мигрирайте логиката на приложение в облака | Научете как да пишете логика на приложения в облака, която отговаря на IoT съобщения | [Migrate your application logic to the cloud](./2-farm/lessons/5-migrate-application-to-the-cloud/README.md) |
| 10 | [Farm](./2-farm/README.md) | Защитете растението си | Научете за сигурността в IoT и как да защитите растението си с ключове и сертификати | [Keep your plant secure](./2-farm/lessons/6-keep-your-plant-secure/README.md) |
| 11 | [Transport](./3-transport/README.md) | Проследяване на местоположение | Научете за GPS проследяване на местоположение за IoT устройства | [Location tracking](./3-transport/lessons/1-location-tracking/README.md) |
| 12 | [Transport](./3-transport/README.md) | Запис на данни за местоположение| Научете как да съхранявате IoT данни за визуализация или анализ по-късно | [Store location data](./3-transport/lessons/2-store-location-data/README.md) |
| 13 | [Transport](./3-transport/README.md) | Визуализиране на данни за местоположение | Научете как да визуализирате данни за местоположение на карта и как картите представят реалния 3D свят в 2 измерения | [Visualize location data](./3-transport/lessons/3-visualize-location-data/README.md) |
| 14 | [Transport](./3-transport/README.md) | Геозони | Научете за геозони и как те могат да се използват за сигнализиране, когато превозни средства в доставната верига са близо до своята дестинация | [Geofences](./3-transport/lessons/4-geofences/README.md) |
| 15 | [Manufacturing](./4-manufacturing/README.md) | Обучение на детектор за качество на плодове | Научете за обучението на класификатор на изображения в облака за откриване качеството на плодове | [Train a fruit quality detector](./4-manufacturing/lessons/1-train-fruit-detector/README.md) |
| 16 | [Manufacturing](./4-manufacturing/README.md) | Проверка на качеството на плодове от IoT устройство | Научете за използването на вашия детектор за качество на плодове от IoT устройство | [Check fruit quality from an IoT device](./4-manufacturing/lessons/2-check-fruit-from-device/README.md)|
| 17 | [Manufacturing](./4-manufacturing/README.md) | Стартиране на детектора за плодове на ръба | Научете за стартирането на вашия детектор за плодове на IoT устройство на ръба | [Run your fruit detector on the edge](./4-manufacturing/lessons/3-run-fruit-detector-edge/README.md) |
| 18 | [Manufacturing](./4-manufacturing/README.md) | Активиране на откриване на качество на плод от сензор | Научете за активирането на откриването на качество на плод от сензор | [Trigger fruit quality detection from a sensor](./4-manufacturing/lessons/4-trigger-fruit-detector/README.md)|
| 19 | [Retail](./5-retail/README.md) | Обучение на детектор за наличности | Научете как да използвате откриване на обекти за обучение на детектор на наличности за броене на наличностите в магазин | [Train a stock detector](./5-retail/lessons/1-train-stock-detector/README.md) |
| 20 | [Retail](./5-retail/README.md) | Проверка на наличност от IoT устройство | Научете как да проверявате наличност от IoT устройство, използвайки модел за откриване на обекти | [Check stock from an IoT device](./5-retail/lessons/2-check-stock-device/README.md) |
| 21 | [Consumer](./6-consumer/README.md) | Разпознаване на реч с IoT устройство | Научете как да разпознавате реч от IoT устройство за създаване на умен таймер | [Recognize speech with an IoT device](./6-consumer/lessons/1-speech-recognition/README.md) |
| 22 | [Consumer](./6-consumer/README.md) | Разбиране на езика | Научете как да разбирате изречения, казани на IoT устройство | [Understand language](./6-consumer/lessons/2-language-understanding/README.md) |
| 23 | [Consumer](./6-consumer/README.md) | Настройка на таймер и предоставяне на обратна реч | Научете как да настроите таймер на IoT устройство и да давате речева обратна връзка кога е настроен таймера и кога приключва | [Set a timer and provide spoken feedback](./6-consumer/lessons/3-spoken-feedback/README.md) |
| 24 | [Consumer](./6-consumer/README.md) | Поддръжка на няколко езика | Научете как да поддържате няколко езика, както в говоренето, така и в отговорите на вашия умен таймер | [Support multiple languages](./6-consumer/lessons/4-multiple-language-support/README.md) |
## Офлайн достъп
Можете да използвате тази документация офлайн, като използвате [Docsify](https://docsify.js.org/#/). Форкнете това хранилище, [инсталирайте Docsify](https://docsify.js.org/#/quickstart) на локалната си машина и след това в главната папка на това хранилище напишете `docsify serve`. Уебсайтът ще се зареди на порт 3000 на локалния ви хост: `localhost:3000`.
## Тест
Благодарим на общността за хостването на интерактивния тест, който проверява вашите познания по всеки от главите. Можете да проверите знанията си [тук](https://ff-quizzes.netlify.app/en/)
Благодарим на общността за хостването на интерактивния тест, който проверява вашите знания за всяка от главите. Тествайте знанията си [тук](https://ff-quizzes.netlify.app/en/)
### PDF
Можете да генерирате PDF на това съдържание за офлайн достъп при нужда. За да направите това, уверете се, че имате [npm инсталиран](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) и изпълнете следните команди в кореновата папка на това хранилище:
Можете да генерирате PDF на това съдържание за офлайн достъп, ако е необходимо. За да направите това, уверете се, че имате [инсталиран npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) и изпълнете следните команди в главната папка на това хранилище:
```sh
npm i
npm run convert
```
### Слайдове
### Презентации
Има презентации за някои от уроците в папката [slides](../../slides).
Има слайдове за някои от уроците в папката [slides](../../slides).
## Други учебни програми
Нашият екип създава и други учебни програми! Вижте:
Екипът ни произвежда и други учебни програми! Вижте:
<!-- CO-OP TRANSLATOR OTHER COURSES START -->
### LangChain
[](https://aka.ms/langchain4j-for-beginners)
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
[](https://aka.ms/langchain4j-for-beginners)
[](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin)
[](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin)
---
### Azure / Edge / MCP / Агенти
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
### Azure / Edge / MCP / Agents
[](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst)
---
### Серия за генеративен ИИ
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst)
[-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst)
[-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst)
[-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst)
---
### Основно обучение
[](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung)
[](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst)
@ -195,18 +169,18 @@ npm run convert
---
### Серия Copilot
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst)
[](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst)
<!-- CO-OP TRANSLATOR OTHER COURSES END -->
## Приписване на изображения
## Атрибуции на изображения
Можете да намерите всички приписвания за използваните изображения в тази учебна програма там, където е необходимо, в [Attributions](./attributions.md).
Можете да намерите всички атрибуции за изображенията, използвани в тази учебна програма там, където е необходимо, в [Attributions](./attributions.md).
---
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**Отказ от отговорност**:
Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на съответния език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
**Отказ от отговорност**:
Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод.
@ -26,7 +26,7 @@ Seeed Studios любезно предоставиха целия хардуер
**[IoT за начинаещи със Seeed и Microsoft - Raspberry Pi 4 Starter Kit](https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit-p-5004.html)**
[](https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit-p-5004.html)
[](https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit-p-5004.html)
@ -203,7 +203,7 @@ Ca un al doilea pas 'Hello World', veți rula aplicația CounterFit și veți co
Aplicația va începe să ruleze și se va deschide în browserul dvs. web:


Va fi marcată ca *Disconnected*, cu LED-ul din colțul din dreapta sus stins.
@ -224,7 +224,7 @@ Ca un al doilea pas 'Hello World', veți rula aplicația CounterFit și veți co
1. În acest nou terminal, rulați fișierul `app.py` ca înainte. Statusul CounterFit se va schimba la **Connected**, iar LED-ul se va aprinde.


> 💁 Puteți găsi acest cod în folderul [code/virtual-device](../../../../../1-getting-started/lessons/1-introduction-to-iot/code/virtual-device).


> Prezentare grafică realizată de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -38,7 +38,7 @@ Partea **Dispozitiv** din IoT se referă la un aparat care poate interacționa c
Aceste dispozitive interacționează cu lumea fizică, fie prin utilizarea senzorilor pentru a colecta date din mediul înconjurător, fie prin controlarea ieșirilor sau actuatoarelor pentru a face modificări fizice. Exemplul tipic este un termostat inteligent - un dispozitiv care are un senzor de temperatură, un mijloc de setare a unei temperaturi dorite, cum ar fi un cadran sau un ecran tactil, și o conexiune la un sistem de încălzire sau răcire care poate fi activat atunci când temperatura detectată este în afara intervalului dorit. Senzorul de temperatură detectează că încăperea este prea rece, iar un actuator pornește încălzirea.


Există o gamă largă de lucruri care pot acționa ca dispozitive IoT, de la hardware dedicat care detectează un singur lucru, la dispozitive de uz general, chiar și smartphone-ul tău! Un smartphone poate folosi senzori pentru a detecta lumea din jurul său și actuatoare pentru a interacționa cu lumea - de exemplu, utilizând un senzor GPS pentru a detecta locația ta și un difuzor pentru a-ți oferi instrucțiuni de navigare către o destinație.
@ -54,7 +54,7 @@ Dispozitivele nu se conectează întotdeauna direct la Internet prin WiFi sau co
În exemplul unui termostat inteligent, termostatul s-ar conecta folosind WiFi-ul de acasă la un serviciu cloud. Acesta ar trimite datele de temperatură către acest serviciu cloud, iar de acolo ar fi scrise într-o bază de date, permițând proprietarului să verifice temperaturile curente și anterioare folosind o aplicație de telefon. Un alt serviciu din cloud ar ști ce temperatură dorește proprietarul și ar trimite mesaje înapoi către dispozitivul IoT prin serviciul cloud pentru a spune sistemului de încălzire să se pornească sau să se oprească.


O versiune și mai inteligentă ar putea folosi AI în cloud cu date de la alți senzori conectați la alte dispozitive IoT, cum ar fi senzori de ocupare care detectează ce camere sunt utilizate, precum și date precum vremea și chiar calendarul tău, pentru a lua decizii privind setarea temperaturii într-un mod inteligent. De exemplu, ar putea opri încălzirea dacă citește din calendarul tău că ești în vacanță sau ar putea opri încălzirea pe baza utilizării camerelor, învățând din date pentru a fi din ce în ce mai precis în timp.
@ -94,7 +94,7 @@ Cu cât ciclul ceasului este mai rapid, cu atât mai multe instrucțiuni pot fi
> 💁 CPU-urile execută programe folosind [ciclul fetch-decode-execute](https://wikipedia.org/wiki/Instruction_cycle). Pentru fiecare ticăit de ceas, CPU-ul va prelua următoarea instrucțiune din memorie, o va decoda, apoi o va executa, cum ar fi utilizarea unei unități logice aritmetice (ALU) pentru a aduna 2 numere. Unele execuții vor dura mai multe ticăituri pentru a rula, astfel încât următorul ciclu va rula la următorul ticăit după ce instrucțiunea a fost finalizată.


Microcontrolerele au viteze de ceas mult mai mici decât computerele desktop sau laptop, sau chiar decât majoritatea smartphone-urilor. De exemplu, Wio Terminal are un CPU care funcționează la 120MHz sau 120.000.000 de cicluri pe secundă.
@ -182,7 +182,7 @@ Plăcile Arduino sunt programate în C sau C++. Utilizarea C/C++ permite ca codu
Ai scrie codul de inițializare în funcția `setup`, cum ar fi conectarea la WiFi și servicii cloud sau inițializarea pinilor pentru intrare și ieșire. Codul din `loop` ar conține apoi procesarea, cum ar fi citirea de la un senzor și trimiterea valorii în cloud. De obicei, ai include o întârziere în fiecare buclă, de exemplu, dacă dorești ca datele senzorului să fie trimise doar la fiecare 10 secunde, ai adăuga o întârziere de 10 secunde la sfârșitul buclei, astfel încât microcontrolerul să poată dormi, economisind energie, apoi să ruleze bucla din nou când este necesar, 10 secunde mai târziu.


✅ Această arhitectură de program este cunoscută sub numele de *buclă de evenimente* sau *buclă de mesaje*. Multe aplicații folosesc acest model în fundal și este standardul pentru majoritatea aplicațiilor desktop care rulează pe OS-uri precum Windows, macOS sau Linux. Funcția `loop` ascultă mesaje de la componentele interfeței de utilizator, cum ar fi butoanele, sau dispozitivele precum tastatura, și răspunde la acestea. Poți citi mai multe în acest [articol despre bucla de evenimente](https://wikipedia.org/wiki/Event_loop).
# Interacționează cu lumea fizică folosind senzori și actuatoare


> Prezentare grafică realizată de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -92,7 +92,7 @@ Senzorii digitali, la fel ca cei analogici, detectează lumea din jur folosind s
Cel mai simplu senzor digital este un buton sau un comutator. Acesta este un senzor cu două stări, pornit sau oprit.


Pinii de pe dispozitivele IoT, cum ar fi pinii GPIO, pot măsura direct acest semnal ca 0 sau 1. Dacă tensiunea trimisă este aceeași cu tensiunea returnată, valoarea citită este 1, altfel valoarea citită este 0. Nu este nevoie să se convertească semnalul, acesta poate fi doar 1 sau 0.
@ -125,7 +125,7 @@ Câteva actuatoare comune includ:
Urmează ghidul relevant de mai jos pentru a adăuga un actuator la dispozitivul tău IoT, controlat de senzor, pentru a construi o lampă de veghe IoT. Aceasta va colecta nivelurile de lumină de la senzorul de lumină și va utiliza un actuator sub forma unui LED pentru a emite lumină atunci când nivelul de lumină detectat este prea scăzut.


* [Computer cu placă unică - Raspberry Pi](pi-actuator.md)
@ -140,7 +140,7 @@ La fel ca senzorii, actuatoarele pot fi analogice sau digitale.
Actuatoarele analogice primesc un semnal analogic și îl transformă într-un tip de interacțiune, unde interacțiunea se schimbă în funcție de tensiunea furnizată.
Un exemplu este o lumină reglabilă, cum ar fi cele pe care le-ai putea avea în casă. Cantitatea de tensiune furnizată luminii determină cât de strălucitoare este aceasta.


La fel ca în cazul senzorilor, dispozitivul IoT funcționează cu semnale digitale, nu analogice. Asta înseamnă că, pentru a trimite un semnal analogic, dispozitivul IoT are nevoie de un convertor digital-analogic (DAC), fie direct pe dispozitivul IoT, fie pe o placă de conectare. Acesta va converti 0-urile și 1-urile de la dispozitivul IoT într-o tensiune analogică pe care actuatorul o poate utiliza.
@ -187,7 +187,7 @@ Actuatorii digitali, la fel ca senzorii digitali, au fie două stări controlate
Un actuator digital simplu este un LED. Când un dispozitiv trimite un semnal digital de 1, se trimite o tensiune înaltă care aprinde LED-ul. Când se trimite un semnal digital de 0, tensiunea scade la 0V și LED-ul se stinge.


✅ Ce alți actuatori simpli cu 2 stări îți vin în minte? Un exemplu este un solenoid, care este un electromagnet ce poate fi activat pentru a face lucruri precum mișcarea unui șurub de ușă pentru a bloca/debloca o ușă.
@ -26,7 +26,7 @@ LED-ul Grove vine ca un modul cu o selecție de LED-uri, permițându-ți să al
Conectează LED-ul.


1. Alege LED-ul preferat și inserează picioarele acestuia în cele două găuri de pe modulul LED.
@ -40,7 +40,7 @@ Conectează LED-ul.
1. Cu Raspberry Pi oprit, conectează celălalt capăt al cablului Grove la soclul digital marcat **D5** pe Grove Base hat atașat la Pi. Acest soclu este al doilea din stânga, pe rândul de socluri de lângă pini GPIO.


@ -16,13 +16,13 @@ Senzorul de lumină Grove utilizat pentru detectarea nivelurilor de lumină treb
Conectează senzorul de lumină.


1. Introdu un capăt al unui cablu Grove în soclul modulului senzorului de lumină. Acesta va intra doar într-un singur mod.
1. Cu Raspberry Pi-ul oprit, conectează celălalt capăt al cablului Grove la soclul analogic marcat **A0** de pe Grove Base hat atașat la Pi. Acest soclu este al doilea din dreapta, pe rândul de socluri de lângă pini GPIO.


După ce LED-ul a fost creat, poți schimba culoarea folosind selectorul *Color*. Selectează butonul **Set** pentru a schimba culoarea după ce ai ales-o.
@ -28,11 +28,11 @@ Adaugă senzorul de lumină în aplicația CounterFit.
1. Selectează butonul **Add** pentru a crea senzorul de lumină pe Pin 0.


Senzorul de lumină va fi creat și va apărea în lista de senzori.




> Schiță realizată de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -47,7 +47,7 @@ MQTT este cel mai popular protocol de comunicare pentru dispozitivele IoT și es
MQTT are un singur broker și mai mulți clienți. Toți clienții se conectează la broker, iar brokerul direcționează mesajele către clienții relevanți. Mesajele sunt direcționate folosind subiecte denumite, mai degrabă decât să fie trimise direct unui client individual. Un client poate publica pe un subiect, iar orice client care se abonează la acel subiect va primi mesajul.


✅ Fă niște cercetări. Dacă ai multe dispozitive IoT, cum poți asigura că brokerul MQTT poate gestiona toate mesajele?
@ -69,7 +69,7 @@ Un caz de utilizare real pentru o astfel de configurație ar putea fi colectarea
> 💁 Acest broker de test este public și nesecurizat. Oricine ar putea asculta ceea ce publici, așa că nu ar trebui utilizat cu date care trebuie păstrate private.


Urmează pasul relevant de mai jos pentru a conecta dispozitivul tău la brokerul MQTT:
@ -350,7 +350,7 @@ Pentru mașinării, s-ar putea să vrei să păstrezi datele, mai ales dacă sun
Designerii dispozitivelor IoT ar trebui să ia în considerare, de asemenea, dacă dispozitivul IoT poate fi utilizat în timpul unei întreruperi a Internetului sau a pierderii semnalului cauzate de locație. Un termostat inteligent ar trebui să poată lua unele decizii limitate pentru a controla încălzirea dacă nu poate trimite telemetrie în cloud din cauza unei întreruperi.
[](https://twitter.com/internetofshit/status/1315736960082808832)
[](https://twitter.com/internetofshit/status/1315736960082808832)
Pentru ca MQTT să gestioneze o pierdere de conectivitate, codul dispozitivului și al serverului va trebui să fie responsabil pentru asigurarea livrării mesajelor, dacă este necesar, de exemplu prin cerința ca toate mesajele trimise să fie răspunse prin mesaje suplimentare pe un topic de răspuns, iar dacă nu, acestea să fie puse în coadă manual pentru a fi retrimise mai târziu.
@ -358,7 +358,7 @@ Pentru ca MQTT să gestioneze o pierdere de conectivitate, codul dispozitivului
Comenzile sunt mesaje trimise de cloud către un dispozitiv, instruindu-l să facă ceva. De cele mai multe ori, acest lucru implică oferirea unui fel de ieșire printr-un actuator, dar poate fi și o instrucțiune pentru dispozitivul în sine, cum ar fi să se repornească sau să colecteze telemetrie suplimentară și să o returneze ca răspuns la comandă.


Un termostat ar putea primi o comandă din cloud pentru a porni încălzirea. Pe baza datelor de telemetrie de la toți senzorii, dacă serviciul cloud a decis că încălzirea ar trebui să fie pornită, trimite comanda relevantă.


> Prezentare grafică de [Nitya Narasimhan](https://github.com/nitya). Faceți clic pe imagine pentru o versiune mai mare.
@ -90,7 +90,7 @@ Zilele gradelor de creștere, sau GDD, sunt calculate pe zi ca temperatura medie
Formula completă pentru GDD este puțin complicată, dar există o ecuație simplificată care este adesea utilizată ca o bună aproximare:


* **GDD** - acesta este numărul de zile ale gradelor de creștere
* **T max** - aceasta este temperatura maximă zilnică în grade Celsius
@ -118,7 +118,7 @@ Introducând aceste numere în calculul nostru:
Aceasta dă un calcul de:


Porumbul a primit 4 GDD în acea zi. Presupunând o varietate de porumb care necesită 800 GDD pentru a se maturiza, va avea nevoie de încă 796 GDD pentru a ajunge la maturitate.
@ -239,7 +239,7 @@ Pașii pentru a face acest lucru manual sunt:
De exemplu, dacă temperatura maximă a zilei este 25°C, iar cea minimă este 12°C:


@ -33,7 +33,7 @@ După ce aveți datele de temperatură, puteți utiliza Jupyter Notebook-ul din
Jupyter va porni și va deschide notebook-ul în browserul dvs. Parcurgeți instrucțiunile din notebook pentru a vizualiza temperaturile măsurate și a calcula zilele de grad de creștere.
@ -16,7 +16,7 @@ Senzorul de temperatură Grove poate fi conectat la Raspberry Pi.
Conectează senzorul de temperatură


1. Introdu un capăt al unui cablu Grove în mufa senzorului de umiditate și temperatură. Acesta va intra doar într-un singur sens.
@ -38,11 +38,11 @@ Adaugă senzorii de umiditate și temperatură în aplicația CounterFit.
1. Selectează butonul **Add** pentru a crea senzorul de umiditate pe Pin 5.


Senzorul de umiditate va fi creat și va apărea în lista de senzori.


1. Creează un senzor de temperatură:
@ -54,11 +54,11 @@ Adaugă senzorii de umiditate și temperatură în aplicația CounterFit.
1. Selectează butonul **Add** pentru a crea senzorul de temperatură pe Pin 6.


Senzorul de temperatură va fi creat și va apărea în lista de senzori.


## Programează aplicația senzorului de temperatură
@ -18,7 +18,7 @@ Senzorul de temperatură Grove poate fi conectat la portul digital al Wio Termin
Conectează senzorul de temperatură.


1. Introdu un capăt al cablului Grove în soclul senzorului de umiditate și temperatură. Acesta va intra doar într-un singur sens.
@ -13,7 +13,7 @@ I²C are o magistrală formată din 2 fire principale, împreună cu 2 fire de a
| VCC | Colector comun de tensiune | Alimentarea dispozitivelor. Acesta este conectat la firele SDA și SCL pentru a le furniza energie printr-un rezistor pull-up care oprește semnalul atunci când niciun dispozitiv nu este controler. |
| GND | Masă | Oferă o masă comună pentru circuitul electric. |


Pentru a trimite date, un dispozitiv va emite o condiție de start pentru a arăta că este pregătit să trimită date. Acesta va deveni apoi controlerul. Controlerul trimite adresa dispozitivului cu care dorește să comunice, împreună cu informația dacă dorește să citească sau să scrie date. După ce datele au fost transmise, controlerul trimite o condiție de stop pentru a indica faptul că a terminat. După aceasta, un alt dispozitiv poate deveni controler și poate trimite sau primi date.
@ -20,14 +20,14 @@ Va trebui să repeți acești pași de mai multe ori pentru a obține citirile n
Umiditatea gravimetrică a solului se calculează astfel:


* W - greutatea solului umed
* W - greutatea solului uscat
De exemplu, să presupunem că ai o probă de sol care cântărește 212g umed și 197g uscat.
@ -18,13 +18,13 @@ Senzorul Grove de umiditate a solului poate fi conectat la Raspberry Pi.
Conectează senzorul de umiditate a solului.


1. Introdu un capăt al unui cablu Grove în mufa senzorului de umiditate a solului. Acesta va intra doar într-un singur mod.
1. Cu Raspberry Pi oprit, conectează celălalt capăt al cablului Grove la mufa analogică marcată **A0** de pe Grove Base Hat atașat la Pi. Această mufă este a doua din dreapta, pe rândul de mufe de lângă pinii GPIO.


1. Introdu senzorul de umiditate a solului în pământ. Acesta are o „linie de poziție maximă” - o linie albă trasată pe senzor. Introdu senzorul până la această linie, dar nu mai mult.
@ -34,11 +34,11 @@ Adaugă senzorul de umiditate a solului în aplicația CounterFit.
1. Selectează butonul **Add** pentru a crea senzorul *Soil Moisture* pe Pin 0.


Senzorul de umiditate a solului va fi creat și va apărea în lista de senzori.


## Programarea aplicației senzorului de umiditate a solului
@ -18,7 +18,7 @@ Senzorul Grove de umiditate a solului poate fi conectat la portul analogic/digit
Conectează senzorul de umiditate a solului.


1. Introdu un capăt al cablului Grove în soclul senzorului de umiditate a solului. Acesta va intra doar într-un singur mod.


> Schiță realizată de [Nitya Narasimhan](https://github.com/nitya). Faceți clic pe imagine pentru o versiune mai mare.
@ -32,7 +32,7 @@ Dispozitivele IoT folosesc o tensiune joasă. Deși aceasta este suficientă pen
Soluția este să conectați pompa la o sursă de alimentare externă și să folosiți un actuator pentru a porni pompa, similar cu modul în care aprindeți o lumină. Este nevoie de o cantitate mică de energie (sub formă de energie din corpul dumneavoastră) pentru ca degetul să apese pe un întrerupător, iar acest lucru conectează lumina la rețeaua electrică de 110V/240V.


> 🎓 [Electricitatea de rețea](https://wikipedia.org/wiki/Mains_electricity) se referă la electricitatea livrată în case și afaceri prin infrastructura națională în multe părți ale lumii.
@ -72,7 +72,7 @@ Când pârghia se mișcă, de obicei puteți auzi cum face contact cu electromag
Electromagnetul nu are nevoie de multă putere pentru a se activa și a trage pârghia, acesta poate fi controlat folosind ieșirea de 3.3V sau 5V de la un kit de dezvoltare IoT. Circuitul de ieșire poate transporta mult mai multă putere, în funcție de releu, inclusiv tensiune de rețea sau chiar niveluri mai mari de putere pentru utilizare industrială. Astfel, un kit de dezvoltare IoT poate controla un sistem de irigații, de la o pompă mică pentru o singură plantă, până la un sistem industrial masiv pentru o fermă comercială întreagă.


Imaginea de mai sus arată un releu Grove. Circuitul de control se conectează la un dispozitiv IoT și pornește sau oprește releul folosind 3.3V sau 5V. Circuitul de ieșire are două terminale, oricare dintre ele poate fi alimentare sau masă. Circuitul de ieșire poate gestiona până la 250V la 10A, suficient pentru o gamă de dispozitive alimentate de la rețea. Puteți găsi relee care pot gestiona chiar și niveluri mai mari de putere.
1. Introduceți un capăt al unui cablu Grove în soclul releului. Acesta va intra doar într-un singur mod.
1. Cu Raspberry Pi oprit, conectați celălalt capăt al cablului Grove la soclul digital marcat **D5** pe Grove Base Hat atașat la Pi. Acest soclu este al doilea de la stânga, pe rândul de socluri de lângă pinii GPIO. Lăsați senzorul de umiditate a solului conectat la soclul **A0**.


1. Introduceți senzorul de umiditate a solului în pământ, dacă nu este deja introdus din lecția anterioară.


> Prezentare grafică realizată de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -46,8 +46,8 @@ Acest lucru putea fi foarte costisitor, necesita o gamă largă de angajați cal
Cloud-ul este adesea numit în glumă „computerul altcuiva”. Ideea inițială era simplă - în loc să cumperi computere, închiriezi computerele altcuiva. Altcineva, un furnizor de servicii cloud, ar gestiona centre de date uriașe. Ei ar fi responsabili de achiziționarea și instalarea hardware-ului, gestionarea alimentării și răcirii, rețelistică, securitatea clădirii, actualizările hardware și software, totul. Ca client, ai închiria computerele de care ai nevoie, închiriind mai multe pe măsură ce cererea crește, apoi reducând numărul închiriat dacă cererea scade. Aceste centre de date cloud sunt răspândite în întreaga lume.




Aceste centre de date pot avea dimensiuni de câțiva kilometri pătrați. Imaginile de mai sus au fost realizate acum câțiva ani la un centru de date cloud Microsoft și arată dimensiunea inițială, împreună cu o extindere planificată. Zona curățată pentru extindere are peste 5 kilometri pătrați.
@ -108,11 +108,11 @@ Serviciile IoT în cloud rezolvă aceste probleme. Ele sunt întreținute de fur
Dispozitivele IoT se conectează la un serviciu cloud fie utilizând un SDK pentru dispozitive (o bibliotecă care oferă cod pentru a lucra cu funcțiile serviciului), fie direct printr-un protocol de comunicare precum MQTT sau HTTP. SDK-ul pentru dispozitive este de obicei cea mai ușoară cale, deoarece gestionează totul pentru tine, cum ar fi cunoașterea subiectelor de publicare sau abonare și modul de gestionare a securității.


Dispozitivul tău comunică apoi cu alte părți ale aplicației tale prin acest serviciu - similar cu modul în care ai trimis telemetria și ai primit comenzi prin MQTT. Acest lucru se face de obicei folosind un SDK pentru serviciu sau o bibliotecă similară. Mesajele vin de la dispozitivul tău către serviciu, unde alte componente ale aplicației tale le pot citi, iar mesajele pot fi trimise înapoi către dispozitivul tău.


Aceste servicii implementează securitatea prin cunoașterea tuturor dispozitivelor care pot fi conectate și pot trimite date, fie prin înregistrarea prealabilă a dispozitivelor în serviciu, fie prin oferirea dispozitivelor de chei secrete sau certificate pe care le pot folosi pentru a se înregistra singure în serviciu prima dată când se conectează. Dispozitivele necunoscute nu pot să se conecteze; dacă încearcă, serviciul respinge conexiunea și ignoră mesajele trimise de acestea.
@ -124,7 +124,7 @@ Alte componente ale aplicației tale pot să se conecteze la serviciul IoT și s
Acum că ai un abonament Azure, te poți înscrie pentru un serviciu IoT. Serviciul IoT de la Microsoft se numește Azure IoT Hub.


> Schiță realizată de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -28,7 +28,7 @@ Această lecție a fost predată ca parte a [Proiectului IoT pentru Începători
Serverless, sau calculul fără server, implică crearea unor blocuri mici de cod care sunt rulate în cloud ca răspuns la diferite tipuri de evenimente. Când evenimentul are loc, codul tău este rulat și primește date despre eveniment. Aceste evenimente pot proveni din diverse surse, inclusiv cereri web, mesaje puse într-o coadă, modificări ale datelor dintr-o bază de date sau mesaje trimise către un serviciu IoT de către dispozitive IoT.


> 💁 Dacă ai folosit declanșatoare de baze de date înainte, poți considera acest lucru similar: codul este declanșat de un eveniment, cum ar fi inserarea unui rând.
@ -54,7 +54,7 @@ Ca dezvoltator IoT, modelul serverless este ideal. Poți scrie o funcție care e
Serviciul de calcul serverless de la Microsoft se numește Azure Functions.


> Ilustrație de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -52,11 +52,11 @@ Acestea sunt scenarii reale și se întâmplă frecvent. Unele exemple au fost p
Când un dispozitiv se conectează la un serviciu IoT, folosește un ID pentru a se identifica. Problema este că acest ID poate fi clonat - un hacker ar putea configura un dispozitiv malițios care folosește același ID ca un dispozitiv real, dar trimite date false.


Soluția este să transformi datele trimise într-un format criptat, folosind o valoare cunoscută doar de dispozitiv și de cloud. Acest proces se numește *criptare*, iar valoarea utilizată pentru criptarea datelor se numește *cheie de criptare*.


Serviciul cloud poate apoi să convertească datele înapoi într-un format lizibil, folosind un proces numit *decriptare*, utilizând fie aceeași cheie de criptare, fie o *cheie de decriptare*. Dacă mesajul criptat nu poate fi decriptat cu cheia, dispozitivul a fost compromis, iar mesajul este respins.


> Schiță realizată de [Nitya Narasimhan](https://github.com/nitya). Faceți clic pe imagine pentru o versiune mai mare.
@ -63,13 +63,13 @@ Pământul este o sferă - un cerc tridimensional. Din acest motiv, punctele sun
> 💁 Nimeni nu știe cu adevărat motivul original pentru care cercurile sunt împărțite în 360 de grade. [Pagina despre grad (unghi) pe Wikipedia](https://wikipedia.org/wiki/Degree_(angle)) acoperă câteva dintre motivele posibile.


Latitudinea este măsurată folosind linii care înconjoară Pământul și sunt paralele cu ecuatorul, împărțind emisferele nordică și sudică în câte 90° fiecare. Ecuatorul este la 0°, Polul Nord este la 90°, cunoscut și ca 90° Nord, iar Polul Sud este la -90°, sau 90° Sud.
Longitudinea este măsurată ca numărul de grade măsurate spre est și vest. Originea longitudinii la 0° se numește *Meridianul Primar* și a fost definită în 1884 ca o linie de la Polul Nord la Polul Sud care trece prin [Observatorul Regal Britanic din Greenwich, Anglia](https://wikipedia.org/wiki/Royal_Observatory,_Greenwich).


> 🎓 Un meridian este o linie imaginară dreaptă care merge de la Polul Nord la Polul Sud, formând un semicerc.
@ -100,7 +100,7 @@ Coordonatele pentru un punct sunt întotdeauna date ca `latitudine, longitudine`
* O latitudine de 47.6423109 (47.6423109 grade nord de ecuator)
* O longitudine de -122.1390293 (122.1390293 grade vest de Meridianul Primar).


## Sisteme de poziționare globală (GPS)
@ -112,7 +112,7 @@ Sistemele GPS funcționează având un număr de sateliți care trimit un semnal
> 💁 Senzorii GPS au nevoie de antene pentru a detecta undele radio. Antenele integrate în camioane și mașini cu GPS la bord sunt poziționate pentru a obține un semnal bun, de obicei pe parbriz sau pe acoperiș. Dacă utilizați un sistem GPS separat, cum ar fi un smartphone sau un dispozitiv IoT, trebuie să vă asigurați că antena integrată în sistemul GPS sau telefon are o vedere clară a cerului, cum ar fi montarea pe parbriz.


Sateliții GPS orbitează Pământul, nefiind într-un punct fix deasupra senzorului, astfel încât datele despre locație includ altitudinea deasupra nivelului mării, precum și latitudinea și longitudinea.
@ -18,13 +18,13 @@ Senzorul Grove GPS poate fi conectat la Raspberry Pi.
Conectează senzorul GPS.


1. Introdu un capăt al cablului Grove în soclul senzorului GPS. Acesta va intra doar într-un singur mod.
1. Cu Raspberry Pi oprit, conectează celălalt capăt al cablului Grove la soclul UART marcat **UART** de pe Grove Base hat atașat la Pi. Acest soclu se află pe rândul din mijloc, pe partea cea mai apropiată de slotul pentru cardul SD, la capătul opus porturilor USB și soclului ethernet.


1. Poziționează senzorul GPS astfel încât antena atașată să aibă vizibilitate către cer - ideal lângă o fereastră deschisă sau afară. Este mai ușor să obții un semnal clar fără obstacole în calea antenei.
* Setează **Source** la `Lat/Lon` și setează o latitudine, longitudine și numărul de sateliți folosiți pentru a obține fixarea GPS. Această valoare va fi trimisă o singură dată, așa că bifează caseta **Repeat** pentru ca datele să se repete la fiecare secundă.


* Setează **Source** la `NMEA` și adaugă câteva propoziții NMEA în caseta de text. Toate aceste valori vor fi trimise, cu o întârziere de 1 secundă înainte ca fiecare propoziție GGA (fixare poziție) nouă să poată fi citită.


Poți folosi un instrument precum [nmeagen.org](https://www.nmeagen.org) pentru a genera aceste propoziții desenând pe o hartă. Aceste valori vor fi trimise o singură dată, așa că bifează caseta **Repeat** pentru ca datele să se repete la o secundă după ce toate au fost trimise.
* Setează **Source** la fișier GPX și încarcă un fișier GPX cu locații de traseu. Poți descărca fișiere GPX de pe o serie de site-uri populare de hărți și drumeții, cum ar fi [AllTrails](https://www.alltrails.com/). Aceste fișiere conțin locații GPS multiple ca traseu, iar senzorul GPS va returna fiecare locație nouă la intervale de 1 secundă.


Aceste valori vor fi trimise o singură dată, așa că bifează caseta **Repeat** pentru ca datele să se repete la o secundă după ce toate au fost trimise.


> Prezentare grafică realizată de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -75,7 +75,7 @@ Baze de date NoSQL sunt numite NoSQL deoarece nu au aceeași structură rigidă
> 💁 În ciuda numelui lor, unele baze de date NoSQL îți permit să folosești SQL pentru a interoga datele.


Baze de date NoSQL nu au o schemă predefinită care limitează modul în care sunt stocate datele, în schimb poți insera orice date nestructurate, de obicei folosind documente JSON. Aceste documente pot fi organizate în foldere, similar cu fișierele de pe computerul tău. Fiecare document poate avea câmpuri diferite față de alte documente - de exemplu, dacă stocai date IoT de la vehiculele tale agricole, unele ar putea avea câmpuri pentru datele accelerometrului și vitezei, altele ar putea avea câmpuri pentru temperatura din remorcă. Dacă ai adăuga un nou tip de camion, cum ar fi unul cu cântare integrate pentru a urmări greutatea produselor transportate, atunci dispozitivul tău IoT ar putea adăuga acest nou câmp și ar putea fi stocat fără modificări ale bazei de date.
@ -89,7 +89,7 @@ Unele baze de date NoSQL cunoscute includ Azure CosmosDB, MongoDB și CouchDB.
În lecția anterioară, ai capturat date GPS de la un senzor GPS conectat la dispozitivul tău IoT. Pentru a stoca aceste date IoT în cloud, trebuie să le trimiți către un serviciu IoT. Din nou, vei folosi Azure IoT Hub, același serviciu IoT în cloud pe care l-ai utilizat în proiectul anterior.


### Sarcină - trimite date GPS către un IoT Hub
@ -171,7 +171,7 @@ Datele din calea rece sunt stocate în depozite de date - baze de date concepute
Odată ce datele ajung în IoT Hub, poți scrie cod serverless pentru a asculta evenimentele publicate pe endpoint-ul compatibil Event-Hub. Aceasta este calea caldă - aceste date vor fi stocate și utilizate în lecția următoare pentru raportarea traseului.


Conturile de stocare Azure reprezintă un serviciu de stocare generală care poate stoca date în diverse moduri. Poți stoca date sub formă de blob-uri, în cozi, în tabele sau ca fișiere, toate în același timp.


> Prezentare grafică de [Nitya Narasimhan](https://github.com/nitya). Faceți clic pe imagine pentru o versiune mai mare.
@ -64,11 +64,11 @@ Luând un exemplu simplu - în proiectul de fermă ați capturat setările de um
Pentru un om, înțelegerea acestor date poate fi dificilă. Este un perete de numere fără sens. Ca prim pas pentru vizualizarea acestor date, ele pot fi reprezentate pe un grafic liniar:


Acesta poate fi îmbunătățit prin adăugarea unei linii care indică momentul în care sistemul automat de irigare a fost activat la o citire de umiditate a solului de 450:


Acest grafic arată foarte rapid nu doar nivelurile de umiditate ale solului, ci și punctele în care sistemul de irigare a fost activat.
@ -84,7 +84,7 @@ Când lucrați cu date GPS, cea mai clară vizualizare poate fi să plotați dat
Lucrul cu hărți este un exercițiu interesant, iar opțiunile sunt numeroase, cum ar fi Bing Maps, Leaflet, Open Street Maps și Google Maps. În această lecție, veți învăța despre [Azure Maps](https://azure.microsoft.com/services/azure-maps/?WT.mc_id=academic-17441-jabenn) și cum pot afișa datele voastre GPS.
Azure Maps este "o colecție de servicii geospațiale și SDK-uri care utilizează date de cartografiere actualizate pentru a oferi context geografic aplicațiilor web și mobile." Dezvoltatorii sunt furnizați cu instrumente pentru a crea hărți frumoase, interactive, care pot face lucruri precum oferirea de rute de trafic recomandate, informații despre incidente de trafic, navigare interioară, capacități de căutare, informații despre altitudine, servicii meteorologice și multe altele.
@ -185,7 +185,7 @@ Acum puteți face următorul pas, care este să afișați harta pe o pagină web
Dacă deschideți pagina `index.html` într-un browser web, ar trebui să vedeți o hartă încărcată, concentrată pe zona Seattle.


✅ Experimentați cu parametrii de zoom și centru pentru a schimba afișarea hărții. Puteți adăuga coordonate diferite corespunzătoare latitudinii și longitudinii datelor voastre pentru a re-centra harta.
@ -319,7 +319,7 @@ Dacă faci o cerere către spațiul de stocare pentru a prelua datele, s-ar pute
1. Încarcă pagina HTML în browserul tău. Aceasta va încărca harta, apoi va încărca toate datele GPS din spațiul de stocare și le va plota pe hartă.


> 💁 Poți găsi acest cod în [code](../../../../../3-transport/lessons/3-visualize-location-data/code) folder.


> Schiță realizată de [Nitya Narasimhan](https://github.com/nitya). Faceți clic pe imagine pentru o versiune mai mare.
@ -35,7 +35,7 @@ Acest videoclip oferă o prezentare generală a geofencing-ului și a modului de
O geofence este un perimetru virtual pentru o regiune geografică reală. Geofence-urile pot fi cercuri definite ca un punct și o rază (de exemplu, un cerc cu diametrul de 100m în jurul unei clădiri) sau un poligon care acoperă o zonă, cum ar fi o zonă școlară, limitele unui oraș sau campusul unei universități sau al unui birou.


> 💁 Este posibil să fi folosit deja geofence-uri fără să știți. Dacă ați setat o reamintire folosind aplicația de reamintiri iOS sau Google Keep bazată pe o locație, ați folosit o geofence. Aceste aplicații vor configura o geofence pe baza locației date și vă vor alerta când telefonul dvs. intră în geofence.
@ -212,7 +212,7 @@ Este important să cunoașteți distanța până la marginea geofence-ului și s
De exemplu, imaginați-vă citiri GPS care arată că un vehicul circula pe un drum care ajunge să treacă pe lângă o geofence. Dacă o singură valoare GPS este inexactă și plasează vehiculul în interiorul geofence-ului, în ciuda faptului că nu există acces rutier, aceasta poate fi ignorată.


În imaginea de mai sus, există o geofence peste o parte a campusului Microsoft. Linia roșie arată un camion care circulă de-a lungul autostrăzii 520, cu cercuri care indică citirile GPS. Majoritatea acestor citiri sunt corecte și se află de-a lungul autostrăzii 520, cu o citire inexactă în interiorul geofence-ului. Nu există nicio posibilitate ca acea citire să fie corectă - nu există drumuri care să permită camionului să se abată brusc de pe autostrada 520 către campus și apoi să revină pe autostrada 520. Codul care verifică acest geofence va trebui să ia în considerare citirile anterioare înainte de a acționa pe baza rezultatelor testului geofence.
✅ Ce date suplimentare ar fi necesare pentru a verifica dacă o citire GPS poate fi considerată corectă?
@ -284,7 +284,7 @@ După cum îți amintești din lecțiile anterioare, IoT Hub îți permite să r
Răspunsul este că nu poate! În schimb, poți defini mai multe conexiuni separate pentru a citi evenimentele, iar fiecare dintre ele poate gestiona redarea mesajelor necitite. Acestea se numesc *grupuri de consumatori*. Când te conectezi la endpoint, poți specifica grupul de consumatori la care vrei să te conectezi. Fiecare componentă a aplicației tale se va conecta la un grup de consumatori diferit.


În teorie, până la 5 aplicații pot să se conecteze la fiecare grup de consumatori, și toate vor primi mesaje când acestea sosesc. Este o practică recomandată să ai doar o aplicație care accesează fiecare grup de consumatori pentru a evita procesarea duplicată a mesajelor și pentru a te asigura că, la repornire, toate mesajele în coadă sunt procesate corect. De exemplu, dacă lansezi aplicația Functions local, precum și o rulezi în cloud, ambele vor procesa mesaje, ceea ce va duce la stocarea duplicată a bloburilor în contul de stocare.


> Prezentare grafică de [Nitya Narasimhan](https://github.com/nitya). Click pe imagine pentru o versiune mai mare.
@ -38,7 +38,7 @@ Nu toate culturile se coc uniform. Roșiile, de exemplu, pot avea încă fructe
Creșterea recoltării automatizate a mutat sortarea produselor din timpul recoltării în fabrici. Alimentele circulau pe benzi transportoare lungi, cu echipe de oameni care verificau produsele și eliminau orice nu corespundea standardelor de calitate necesare. Recoltarea era mai ieftină datorită mașinilor, dar exista încă un cost pentru sortarea manuală a alimentelor.


Evoluția următoare a fost utilizarea mașinilor pentru sortare, fie integrate în combinele de recoltare, fie în fabricile de procesare. Prima generație a acestor mașini folosea senzori optici pentru a detecta culorile, controlând actuatoare care împingeau roșiile verzi într-un coș de deșeuri folosind pârghii sau jeturi de aer, lăsând roșiile roșii să continue pe o rețea de benzi transportoare.
@ -62,7 +62,7 @@ De exemplu, ai putea oferi unui model milioane de imagini cu banane necoapte ca
> 🎓 Rezultatele modelelor ML se numesc *predicții*


Modelele ML nu oferă un răspuns binar, ci oferă probabilități. De exemplu, un model poate primi o imagine cu o banană și poate prezice `coaptă` cu 99.7% și `necoaptă` cu 0.3%. Codul tău ar alege apoi cea mai bună predicție și ar decide că banana este coaptă.
@ -90,7 +90,7 @@ Există o gamă largă de instrumente care te pot ajuta să faci acest lucru, in
Custom Vision este un instrument bazat pe cloud pentru antrenarea clasificatorilor de imagini. Acesta îți permite să antrenezi un clasificator folosind doar un număr mic de imagini. Poți încărca imagini printr-un portal web, API web sau un SDK, oferind fiecărei imagini o *etichetă* care reprezintă clasificarea acelei imagini. Apoi antrenezi modelul și îl testezi pentru a vedea cât de bine funcționează. Odată ce ești mulțumit de model, poți publica versiuni ale acestuia care pot fi accesate printr-un API web sau un SDK.
> 💁 Poți antrena un model Custom Vision cu doar 5 imagini pe clasificare, dar mai multe imagini sunt mai bune. Poți obține rezultate mai bune cu cel puțin 30 de imagini.
@ -146,7 +146,7 @@ Pentru a utiliza Custom Vision, mai întâi trebuie să creezi două resurse Cog
Când creezi proiectul, asigură-te că utilizezi resursa `fruit-quality-detector-training` pe care ai creat-o anterior. Folosește un tip de proiect *Classification*, un tip de clasificare *Multiclass* și domeniul *Food*.


✅ Acordă-ți timp pentru a explora interfața utilizatorului Custom Vision pentru clasificatorul tău de imagini.
@ -164,7 +164,7 @@ Clasificatoarele de imagini funcționează la o rezoluție foarte mică. De exem
* Folosind 2 banane coapte, faceți câteva poze cu fiecare din unghiuri diferite, realizând cel puțin 7 poze (5 pentru antrenament, 2 pentru testare), dar ideal mai multe.


* Repetați același proces folosind 2 banane necoapte.
@ -174,7 +174,7 @@ Clasificatoarele de imagini funcționează la o rezoluție foarte mică. De exem
1. Urmați secțiunea [upload and tag images din ghidul rapid pentru construirea unui clasificator din documentația Microsoft](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#upload-and-tag-images) pentru a încărca imaginile de antrenament. Etichetați fructele coapte ca `ripe` și cele necoapte ca `unripe`.


1. Urmați secțiunea [train the classifier din ghidul rapid pentru construirea unui clasificator din documentația Microsoft](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/getting-started-build-a-classifier?WT.mc_id=academic-17441-jabenn#train-the-classifier) pentru a antrena clasificatorul de imagini pe imaginile încărcate.
@ -192,7 +192,7 @@ După ce clasificatorul este antrenat, îl puteți testa oferindu-i o imagine no
1. Urmați secțiunea [test your model din documentația Microsoft](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/test-your-model?WT.mc_id=academic-17441-jabenn#test-your-model) pentru a testa clasificatorul de imagini. Utilizați imaginile de testare create anterior, nu pe cele utilizate pentru antrenament.


1. Încercați toate imaginile de testare pe care le aveți și observați probabilitățile.
# Verificarea calității fructelor cu un dispozitiv IoT


> Prezentare grafică realizată de [Nitya Narasimhan](https://github.com/nitya). Faceți clic pe imagine pentru o versiune mai mare.
@ -26,7 +26,7 @@
Senzorii de cameră, așa cum sugerează numele, sunt camere care pot fi conectate la un dispozitiv IoT. Acestea pot captura imagini statice sau pot înregistra fluxuri video. Unele camere returnează date brute ale imaginii, în timp ce altele comprimă datele într-un fișier imagine, cum ar fi JPEG sau PNG. De obicei, camerele compatibile cu dispozitivele IoT sunt mult mai mici și au o rezoluție mai scăzută decât cele cu care sunteți obișnuiți, dar există și camere de înaltă rezoluție care rivalizează cu telefoanele de top. Puteți găsi o varietate de lentile interschimbabile, configurații cu mai multe camere, camere termice în infraroșu sau camere UV.


Majoritatea senzorilor de cameră utilizează senzori de imagine în care fiecare pixel este o fotodiodă. O lentilă focalizează imaginea pe senzorul de imagine, iar mii sau milioane de fotodiode detectează lumina care cade pe fiecare dintre ele, înregistrând aceasta ca date de pixel.
@ -74,7 +74,7 @@ Iterațiile sunt publicate din portalul Custom Vision.
1. Selectați butonul **Publish** pentru iterație.


1. În dialogul *Publish Model*, setați *Prediction resource* la resursa `fruit-quality-detector-prediction` creată în lecția anterioară. Lăsați numele ca `Iteration2` și selectați butonul **Publish**.
@ -88,7 +88,7 @@ Iterațiile sunt publicate din portalul Custom Vision.
De asemenea, luați o copie a valorii *Prediction-Key*. Aceasta este o cheie de securitate pe care trebuie să o transmiteți când apelați modelul. Doar aplicațiile care transmit această cheie au permisiunea de a utiliza modelul, orice alte aplicații sunt respinse.


✅ Când o nouă iterație este publicată, aceasta va avea un nume diferit. Cum credeți că ați putea schimba iterația utilizată de un dispozitiv IoT?
@ -109,7 +109,7 @@ Este posibil să constatați că rezultatele obținute folosind camera conectat
Pentru a obține cele mai bune rezultate pentru un clasificator de imagini, doriți să antrenați modelul cu imagini cât mai asemănătoare cu cele utilizate pentru predicții. De exemplu, dacă ați folosit camera telefonului pentru a captura imagini pentru antrenament, calitatea imaginii, claritatea și culorile vor fi diferite față de o cameră conectată la un dispozitiv IoT.


În imaginea de mai sus, fotografia cu banana din stânga a fost realizată folosind o cameră Raspberry Pi, iar cea din dreapta a fost realizată cu același banana în aceeași locație folosind un iPhone. Există o diferență vizibilă în calitate - fotografia realizată cu iPhone-ul este mai clară, cu culori mai vii și mai mult contrast.
Some files were not shown because too many files have changed in this diff
Show More