From d237778e7ad6a865f01a314ca90d8da429c3c2e0 Mon Sep 17 00:00:00 2001 From: Jks Liu Date: Wed, 14 Jul 2021 23:44:42 +0800 Subject: [PATCH 1/6] Fix quiz-app i18n bug, supporting ar & bn now (#204) --- quiz-app/src/App.vue | 6 ++---- quiz-app/src/assets/translations/bn.json | 2 +- quiz-app/src/assets/translations/index.js | 4 ++++ 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/quiz-app/src/App.vue b/quiz-app/src/App.vue index 41b741aa..a6a92613 100644 --- a/quiz-app/src/App.vue +++ b/quiz-app/src/App.vue @@ -4,11 +4,9 @@ Home
diff --git a/quiz-app/src/assets/translations/bn.json b/quiz-app/src/assets/translations/bn.json index 737d911f..1617b609 100644 --- a/quiz-app/src/assets/translations/bn.json +++ b/quiz-app/src/assets/translations/bn.json @@ -788,7 +788,7 @@ "questionText": "IoT Hub সিক্যুরিটি ছাড়াই যেকোন ডিভাইস কানেক্ট করতে দেয়", "answerOptions": [ { - "answerText": "মিথ্যা"", + "answerText": "মিথ্যা", "isCorrect": "true" }, { diff --git a/quiz-app/src/assets/translations/index.js b/quiz-app/src/assets/translations/index.js index ffcbad94..1f118787 100644 --- a/quiz-app/src/assets/translations/index.js +++ b/quiz-app/src/assets/translations/index.js @@ -1,9 +1,13 @@ // index.js +import ar from './ar.json'; +import bn from './bn.json'; import en from './en.json'; //export const defaultLocale = 'en'; const messages = { + ar: ar[0], + bn: bn[0], en: en[0], }; From 9a55f0c888fc0e575ab6454972236eb6aa027011 Mon Sep 17 00:00:00 2001 From: "Mohammad Iftekher (Iftu) Ebne Jalal" Date: Wed, 14 Jul 2021 21:45:50 +0600 Subject: [PATCH 2/6] [BN-Translation] Plant to Cloud (#207) * Create README.bn.md * Update README.bn.md * Update README.bn.md * Remove leftover text * Create assignment.bn.md * Delete .dummy.md * Update README.bn.md * Update README.bn.md * Update README.bn.md * Fixing Lesson Name Co-authored-by: Jim Bennett --- .../translations/.dummy.md | 9 - .../translations/README.bn.md | 432 ++++++++++++++++++ .../translations/assignment.bn.md | 19 + translations/README.bn.md | 30 +- 4 files changed, 463 insertions(+), 27 deletions(-) delete mode 100644 2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/.dummy.md create mode 100644 2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md create mode 100644 2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/assignment.bn.md diff --git a/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/.dummy.md b/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/.dummy.md deleted file mode 100644 index 6e7db247..00000000 --- a/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/.dummy.md +++ /dev/null @@ -1,9 +0,0 @@ -# Dummy File - -This file acts as a placeholder for the `translations` folder.
-**Please remove this file after adding the first translation** - -For the instructions, follow the directives in the [translations guide](https://github.com/microsoft/IoT-For-Beginners/blob/main/TRANSLATIONS.md) . - -## THANK YOU -We truly appreciate your efforts! diff --git a/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md b/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md new file mode 100644 index 00000000..c4f662fb --- /dev/null +++ b/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md @@ -0,0 +1,432 @@ +# উদ্ভিদকে ক্লাউডে সংযুক্ত করা + +![A sketchnote overview of this lesson](../../../../sketchnotes/lesson-8.jpg) + +> স্কেচনোটটি তৈরী করেছেন [Nitya Narasimhan](https://github.com/nitya). বড় সংস্করণে দেখার জন্য ছবিটিতে ক্লিক করতে হবে। + +## লেকচার-পূর্ববর্তী কুইজ + +[লেকচার-পূর্ববর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/15) + +## সূচনা + +গত পাঠে, আমরা দেখেছি কীভাবে উদ্ভিদটি একটি এমকিউটিটি ব্রোকারের সাথে সংযুক্ত করা যায় এবং লোকালি চলমান কিছু সার্ভার কোড থেকে রিলে নিয়ন্ত্রণ করেছিলাম। এটি এমন একধরণের ইন্টারনেট-সংযুক্ত স্বয়ংক্রিয় পানি সরবরাহ ব্যবস্থা যা বাসাবাড়ির দুয়েকটা উদ্ভিদ থেকে শুরু করে বাণিজ্যিক খামা্রে পর্যন্ত ব্যবহৃত হয়। + +আইওটি ডিভাইসের কার্যনীতি দেখানোর জন্যই মূলত আমরা সর্বজনীন এমকিউটিটি ব্রোকারের মাধ্যমে সংযোগ করেছিলাম, তবে এটি সবচেয়ে নির্ভরযোগ্য বা সুরক্ষিত উপায় নয়। এই পাঠে আমরা ক্লাউড সম্পর্কে এবং পাবলিক ক্লাউড পরিষেবাগুলির দ্বারা সরবরাহকৃত আইওটি সুবিধাগুলো সম্পর্কে শিখব। কীভাবে আমাদের চারাগাছকে পাবলিক এমকিউটিটি ব্রোকারের পরিবর্তে ক্লাউডে স্থানান্তরিত করা যায়, তা শিখবো। + +এই লেসনে আমরা দেখবোঃ + +* [ক্লাউড কী ?](#ক্লাউড-কী) +* [ক্লাউড-সাবস্ক্রিপশন-গ্রহণ](#ক্লাউড-সাবস্ক্রিপশন-গ্রহণ) +* [ক্লাউড IoT সার্ভিস](#ক্লাউড-IoT-সার্ভিস) +* [ক্লাউডে IoT সার্ভিস তৈরী করা](#ক্লাউডে-IoT-সার্ভিস-তৈরী-করা) +* [IoT Hub এর সাথে সংযোগ](#IoT-Hub-এর-সাথে-সংযোগ) +* [IoT সার্ভিসগুলোর সাথে ডিভাইসের সংযোগ](#IoT-সার্ভিসগুলোর-সাথে-ডিভাইসের-সংযোগ) + +## ক্লাউড কী ? + +ক্লাউড আবির্ভাবের পূর্বে যখন কোন কোম্পানি তাদের কর্মীদের কাছে কোন সার্ভিস (যেমন ডেটাবেস বা ফাইল স্টোরেজ), বা জনসাধারণের ব্যবহারের কোন ফীচার (যেমন ওয়েবসাইট) সরবরাহ করতে চায়, তখন তারা ডেটা সেন্টার তৈরি এবং পরিচালনা করে। এটি কয়েকটি কম্পিউটার সম্বলিত একটি ঘর থেকে শুরু করে অনেকগুলি কম্পিউটার নিয়ে একটি বিল্ডিং সমান বড়ও হতে পারে। ঐ কোম্পানি সবকিছুই নিজেরা পরিচালনা করে, যেমন - + +* কম্পিউটার কেনা +* হার্ডওয়্যার রক্ষণাবেক্ষণ +* পাওয়ার এবং কুলিং +* নেটওয়ার্কিং +* সুরক্ষা (বিল্ডিং এবং কম্পিউটারগুলিতে থাকা সফ্টওয়্যার) +* সফ্টওয়্যার ইনস্টলেশন ও আপডেট + +এটি খুব ব্যয়বহুল হতে পারে, বিশাল সংখ্যক দক্ষ কর্মী প্রয়োজন এবং কিছু পরিবর্তন করতে গেলে, তা খুব ধীর হবে। উদাহরণস্বরূপ, যদি কোন অনলাইন স্টোরকে ব্যস্ত ছুটির মৌসুমের জন্য পরিকল্পনা করার প্রয়োজন হয়, তাদের অধিক বিক্রয় এর পরিচালনার জন্য আরও হার্ডওয়ার কেনা, তা কনফিগার করা, ইনস্টল করা প্রয়োজন এবং এসব করার জন্য তাদের কয়েক মাস আগে থেকেই পরিকল্পনা করতে হবে। ছুটির মৌসুম শেষ হয়ে যাওয়ার পরে বিক্রয় কমে যায় -কিন্তু তখনও তারা পরবর্তী ব্যস্ত মৌসুম আসা পর্যন্ত অলস বসে থাকবে , তাদের সব ব্য্যবহুল যন্ত্রও বেকার পড়ে থাকবে। + +✅ এভাবে কাজ করলে, কোম্পানি গুলো কী পরিস্থিতিভেদে দ্রুত তাদের কাজের ধারা বদলাতে পারবে? যদি কোন অনলাইন পোশাক খুচরা বিক্রেতা হঠাৎ করে (কোন সেলিব্রিটি তাদের পোশাকগুলিতে দেখা যাওয়ার কারণে) জনপ্রিয় হয়ে ওঠে, তবে তারা কি হঠাৎ অর্ডারের প্রবাহকে সাপোর্ট করার জন্য তাদের কম্পিউটিং ক্ষমতা পর্যাপ্ত পরিমাণে বাড়িয়ে তুলতে সক্ষম হবে? + +### আরেকজনের কম্পিউটার + +ক্লাউডকে প্রায়শই হাস্যকরভাবে 'অন্য কারো কম্পিউটার' হিসাবে বলা হয়। প্রাথমিক ধারণাটি বেশ সহজ - কম্পিউটার কেনার পরিবর্তে অন্য কারও কম্পিউটার ভাড়া নেয়া। ক্লাউড কম্পিউটিং প্রদানকারী সেই "অন্য কেউ" এই বিশাল ডেটা সেন্টার পরিচালনা করে, তারা হার্ডওয়্যার ক্রয় এবং ইনস্টল করার জন্য, পাওয়ার পরিচালনা এবং কুলিং পরিচালনা, নেটওয়ার্কিং, সুরক্ষা, হার্ডওয়্যার এবং সফ্টওয়্যার আপডেটগুলি, সমস্ত কিছুর জন্য দায়বদ্ধ থাকে। গ্রাহক হিসাবে, আমরা প্রয়োজনীয় কম্পিউটারগুলি ভাড়া নেব; কাজের চাহিদা বাড়লে বেশি ক্ষমতার কম্পিউটার ভাড়া নেব এবং তারপরে চাহিদা কমে গেলে তা ছেড়ে দেব - এভাবেই আমাদের সুবিধামত কাজ করা যাবে। এই ক্লাউড ডেটা সেন্টারগুলি সারা বিশ্ব জুড়ে ছড়িয়ে রয়েছে। + +![A Microsoft cloud data center](../../../../images/azure-region-existing.png) +![A Microsoft cloud data center planned expansion](../../../../images/azure-region-planned-expansion.png) + +এই ডেটা সেন্টারগুলি আকারে একাধিক বর্গকিলোমিটার হতে পারে। উপরের চিত্রগুলি কয়েক বছর আগে একটি মাইক্রোসফ্ট ক্লাউড ডেটা সেন্টারে তোলা হয়েছিল, এবং পরিকল্পিত সম্প্রসারণের পাশাপাশি প্রাথমিক আকারটি দেখায়। সম্প্রসারণের জন্য ক্লিয়ার করা অঞ্চলটি 5 বর্গকিলোমিটারেরও বেশি জায়গাজুড়ে অবস্থিত! + +> 💁 এই ডেটা সেন্টারগুলিতে এত বেশি পরিমাণে বিদ্যুতের প্রয়োজন হয় যে কোন কোন ক্লাউড সার্ভিস প্রোভাইডার এর নিজস্ব বিদ্যুৎ কেন্দ্র রয়েছে। তাদের আকার এবং ক্লাউড সরবরাহকারীদের বিনিয়োগের স্তরের কারণে এগুলি সাধারণত খুব পরিবেশ বান্ধব হয়। এগুলি অনেকগুলো ক্ষুদ্র ক্ষুদ্র ডেটা সেন্টার ব্যবহার করার তুলনায় অনেক বেশি কার্যকরী; বেশিরভাগ সময়ই নবায়নযোগ্য শক্তির উপর চালিত হয় এবং ক্লাউড সরবরাহকারীরা ডেটা সেন্টারগুলি তৈরির জায়গায় বর্জ্য হ্রাস করতে, জলের ব্যবহার কমানোর জন্য এবং বনগুলি পুনর্বাসনের জন্য চেষ্টা করে। ক্লাউড প্রোভাইডাররা পরিবেশগত বিষয়ে কীভাবে সুরক্ষা নিশ্চিতে কাজ করছে তা জানতে [Azure sustainability](https://azure.microsoft.com/global-infrastructure/sustainability/?WT.mc_id=academic-17441-jabenn) পড়ে দেখা যেতে পারে। + +✅ ছোট একটি গবেষণা করা যাকঃ বড় ক্লাউডসমূহ যেমন [মাইক্রোসফটের Azure](https://azure.microsoft.com/?WT.mc_id=academic-17441-jabenn) বা [গুগলের GCP](https://cloud.google.com) সম্পর্কে পড়ে নিই এবং জানার চেষ্টা করি তাদের কয়টি ডেটা সেন্টার রয়েছে এবং তারা পৃথিবীতে কোথায় এগুলোকে রেখেছে? + +ক্লাউড সার্ভিসের ব্যবহার - কোম্পানিগুলোর ব্যয়কে কমিয়ে দেয় এবং তাদের সরবরাহকারীর হাতে ক্লাউড কম্পিউটিং সংক্রান্ত বিষয়ের ভার দিয়ে রেখে তারা নিজেদের গুরুত্বপূর্ণ কাজগুলিতে মনোনিবেশ করতে পারে। ব্যবসায়ী কোম্পানিগুলোকে ডেটা সেন্টার স্পেস ভাড়া বা কেনার প্রয়োজন হয় না, সংযোগ এবং বিদ্যুতের জন্য বিভিন্ন সরবরাহকারীর অর্থ প্রদান বা বিশেষজ্ঞ নিয়োগের প্রয়োজন হয় না। এর পরিবর্তে তারা ক্লাউড সরবরাহকারীর কাছে সবকিছু বাবদ শুধুমাত্র একটি মাসিক বিল প্রদান করে। + +ক্লাউড সরবরাহকারী এক্ষেত্রে নিজেদের ব্যয় কমিয়ে আনার জন্য বড় বড় পর্যায়ে কাজ করে যেমন - কম ব্যয়ে প্রচুর কম্পিউটার কিনে, রক্ষণাবেক্ষণের ক্ষেত্রে তাদের কাজের চাপ হ্রাস করার জন্য সরঞ্জামে বিনিয়োগ করতে পারে, এমনকি তাদের ক্লাউডের সেবা উন্নত করার জন্য তাদের নিজস্ব হার্ডওয়্যার ডিজাইনও তৈরি করতে পারে। + +### Microsoft Azure + +Azure হলো মাইক্রোসফটের ডেভলাপার ক্লাউড এবং এই লেসনে আমরা এটিই ব্যবহার করব। নীচের ভিডিওটিতে Azure সম্পর্কে একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে: + +[![Overview of Azure video](../../../../images/what-is-azure-video-thumbnail.png)](https://www.microsoft.com/videoplayer/embed/RE4Ibng?WT.mc_id=academic-17441-jabenn) + +## ক্লাউড সাবস্ক্রিপশন গ্রহণ + +ক্লাউডে পরিষেবাগুলি ব্যবহার করতে হলে ক্লাউড সরবরাহকারীর সাথে সাবস্ক্রিপশনের জন্য সাইন আপ করতে হয়। এই পাঠের জন্য, আমরা মাইক্রোসফ্ট অ্যাজুরে সাবস্ক্রিপশনের জন্য সাইন আপ করব। যদি ইতিমধ্যে অ্যাজুরে একটি সাবস্ক্রিপশন থাকে তবে এই অংশটি এড়িয়ে, পরবর্তী অংশে চলে যাওয়া যাবে। এখানে বর্ণিত সাবস্ক্রিপশন বিষয়াদি বর্তমানে লেখার সময় সঠিক আছে, তবে সময়ের সাথে তা পরিবর্তিত হতে পারে। + +> 💁 কেউ যদি শিক্ষাপ্রতিষ্ঠানের মাধ্যমে এই লেসনগুলি ব্যবহার করে থাকে, তবে ইতিমধ্যে হয়তো তার কাছে একটি অ্যাজুর সাবস্ক্রিপশন আছে। শিক্ষকের সাথে যোগাযোগ করে বিষয়টি নিশ্চিত করতে হবে। + +এখানে দুটি ভিন্ন ধরণের বিনামূল্যে Azure সাবস্ক্রিপশন ব্যবহার করে আমরা সাইন আপ করতে পারবঃ + +* **Azure for Students** - এটি প্রাপ্তবয়ষ্ক শিক্ষার্থীদের জন্য ডিজাইন করা একটি সাবস্ক্রিপশন। সাইন আপ করার জন্য কোনও ক্রেডিট কার্ডের দরকার নেই এবং আবেদনকারী যে শিক্ষার্থী তা যাচাই করার জন্য প্রাতিষ্ঠানিক ইমেল ঠিকানা ব্যবহার করলেই হবে। সাইন আপ করলেই, ক্লাউডে সার্ভিসে ব্যয় করার জন্য ১০০ মার্কিন ডলার দেয়া হবে, সাথে থাকবে আইওটি পরিষেবা সহ বিনামূল্যে বেশ কিছু ফ্রি পরিষেবা। এটির মেয়াদ 12 মাস স্থায়ী হয় এবং প্রতি বছর রিনিউ করা যাবে। + +* **Azure free subscription** - যারা শিক্ষার্থী নয়, তাদের জন্যই এই সাবস্ক্রিপশন। সাবস্ক্রিপশনে সাইন আপ করার আপনার ক্রেডিট কার্ডের প্রয়োজন হবে, তবে আপনার কার্ডটির কোন বিল/খরচ আসবেনা, এটি কেবল একারণেই যে - আবেদনকারী একজন সত্যিকারের মানুষ, বট নয় - তা যাচাই করা। যে কোন পরিষেবাতে প্রথম 30 দিনের মধ্যে Azure পরিষেবাদির free tier সহ $200 ক্রেডিট দেয়া হয়। ক্রেডিট একবার ব্যবহার হয়ে গেলেও, সরাসরি কার্ড থেকে কোন অর্থ গ্রহণ করা হবেনা, যতক্ষণ পর্যন্ত নাহ সেই ব্যবহারকারী pay-as-you-go সাবস্ক্রিপশন নিচ্ছে। + +> 💁 মাইক্রোসফ্ট অপ্রাপ্তবয়ষ্ক অর্থাৎ 18 বছরের কম বয়সী শিক্ষার্থীদের জন্য "স্টুডেন্ট স্টার্টার" সাবস্ক্রিপশন সরবরাহ করে, তবে এই লেসন লেখার সময় পর্যন্তও এটি আইওটি পরিষেবা সমর্থন করে না। + +### কাজ - ফ্রী ক্লাউড সাবস্ক্রিপশনের জন্য সাইন আপ + +18+ বয়সের শিক্ষার্থীদের সাবস্ক্রিপশনের জন্য অ্যাজুরে সাইন আপ করতে হবে। একটি স্কুল ইমেল ঠিকানাে যাচাই করে নিতে হবে। নিম্নের দুটি উপায়ের যেকোন একটিতে এটি করা যাবে: + +* GitHub student developer pack এর জন্য [education.github.com/pack](https://education.github.com/pack) থেকে সাইন আপ করতে হবে। এটি গিটহাব এবং মাইক্রোসফ্ট অ্যাজুর সহ বিভিন্ন ট্যুল এবং অফারগুলিতে অ্যাক্সেস দেয়। একবার developer pack এর জন্য সাইন আপ করে নিলে, তারপরে শিক্ষার্থীদের জন্য অফারগুলো অফারটি সক্রিয় করা যাবে। + +* Azure for Students একাউন্টের জন্য সরাসরি [azure.microsoft.com/free/students](https://azure.microsoft.com/free/students/?WT.mc_id=academic-17441-jabenn) থেকে সাইন আপ করা। + +> ⚠️প্রাতিষ্ঠানিক ইমেইল এড্রেস যদি কাজ না করে, তবে [এই রেপোসিটরিতে ইস্যু রেইজ](https://github.com/Microsoft/IoT-For-Beginners/issues) করার অনুরোধ করা হচ্ছে। তখন আমরা দেখবো এই প্রতিষ্ঠানের শিক্ষার্থীদের অনুমতি তালিকায় যুক্ত করা যায় কিনা। + +কেউ যদি ছাত্র না হয় বা বৈধ স্কুল ইমেইল ঠিকানা না থাকে তবে একটি অ্যাজুর ফ্রি সাবস্ক্রিপশনের জন্য সাইন আপ করতে পারবে। + +* অ্যাজুর ফ্রি সাবস্ক্রিপশনের জন্য [azure.microsoft.com/free](https://azure.microsoft.com/free/?WT.mc_id=academic-17441-jabenn) থেকে সাইন-আপ করা যাবে। + +## ক্লাউড IoT সার্ভিস + +আমরা যে পাবলিক টেস্ট এমকিউটিটি ব্রোকারটি ব্যবহার করেছি, তা শেখার ক্ষেত্রে অনেক ভালো একটি অপশন। তবে বাণিজ্যিক সেটিংয়ে ব্যবহার করার সরঞ্জাম হিসাবে তার অনেকগুলি ত্রুটি রয়েছে: + +* নির্ভরযোগ্যতা - এটি কোন গ্যারান্টিবিহীন একটি ফ্রী সার্ভিস এবং যে কোনও সময় বন্ধ হতে পারে। +* সুরক্ষা - এটি সর্বজনীন, সুতরাং যে কেউ আমাদের টেলিমেট্রি জানতে বা আমাদের হার্ডওয়্যার নিয়ন্ত্রণের জন্য আদেশগুলি পাঠাতে পারে +* পারফরম্যান্স - এটি কেবল কয়েকটি পরীক্ষামূলক বার্তাগুলির জন্য ডিজাইন করা হয়েছে, সুতরাং বিপুল পরিমাণ বার্তা প্রেরণের জন্য যথোপযুক্ত নয় +* সনাক্তকরণ - এতে কোন ডিভাইসগুলি সংযুক্ত রয়েছে তা জানার কোন উপায় নেই + +ক্লাউডে আইওটি পরিষেবাগুলি এই সমস্যাগুলি সমাধান করে। এগুলি বড় ক্লাউড সরবরাহকারীদের দ্বারা পরিচালিত হয় যারা নির্ভরযোগ্যতার জন্য প্রচুর পরিমাণে বিনিয়োগ করে এবং আকস্মিকভাবে উদ্ভূত সমস্যা সমাধানের জন্য সক্ষমতা রয়েছে । হ্যাকারদের দ্বারা আমাদের ডেটা পড়া বা কমান্ড প্রেরণ বন্ধ করার জন্য, সুরক্ষার ব্যবস্থা রয়েছে। ক্লাউডের প্রয়োজন অনুযায়ী সক্ষমতা বাড়ানো কমানোর সুযোগ সহ প্রতিদিন তারা কয়েক মিলিয়ন বার্তা হ্যান্ডেল করতে সক্ষম । + +> 💁 যদিও এই সুবিধাগুলোর জন্য একটি মাসিক ফি প্রদান করতে হয়, তবুও বেশিরভাগ ক্লাউড সরবরাহকারীরা তাদের আইওটি পরিষেবার একটি ফ্রী ভার্সন রাখে যা প্রতিদিন সীমিত পরিমাণে বার্তা সরবরাহ করে। এই ফ্রী সংস্করণটি সাধারণত কোন ডেভলাপার এর জন্য, ক্লাউড প্রোভাইডারের পরিষেবা সম্পর্কে জানার জন্য যথেষ্ট। এই পাঠে আমরা একটি বিনামূল্যে সংস্করণ ব্যবহার করব। + +আইওটি ডিভাইসগুলি হয় কোন ডিভাইস SDK (একটি লাইব্রেরি যা সার্ভিসটির বৈশিষ্ট্যগুলির সাথে কাজ করার জন্য কোড সরবরাহ করে) ব্যবহার করে অথবা এমকিউটিটি বা এইচটিটিপি এর মতো কোন যোগাযোগ প্রোটোকলের মাধ্যমে সরাসরি ক্লাউড পরিষেবায় সংযুক্ত হয়। ডিভাইস এসডিকে সাধারণত সবচেয়ে সহজতম উপায় কারণ এটি নিজেই সমস্ত কিছু পরিচালনা করে যেমন কোন বিষয়গুলি প্রকাশ বা সাবস্ক্রাইব করতে হয় তা জেনে রাখা এবং কীভাবে সুরক্ষা নিশ্চিত করতে হয় তা পরিচালনা করা। + +![Devices connect to a service using a device SDK. Server code also connects to the service via an SDK](../../../../images/iot-service-connectivity.png) + +আমাদের ডিভাইসটি তারপরে এই অ্যাপ্লিকেশনের অন্যান্য অংশগুলির সাথে এই সার্ভিসের মাধ্যমে যোগাযোগ করে - যেভাবে আমরা এমকিউটিটি-এর মাধ্যমে নির্দেশ গ্রহণ এবং টেলমেট্রি পাঠিয়েছিলাম। বার্তাগুলি সাধারণত আমাদের ডিভাইস থেকে সার্ভিসে আসে যেখানে আমাদের অ্যাপ্লিকেশনের অন্যান্য উপাদানগুলি সেগুলি পড়তে পারে এবং বার্তাগুলি ডিভাইসে আবারও পাঠানো যেতে পারে। + +![Devices without a valid secret key cannot connect to the IoT service](../../../../images/iot-service-allowed-denied-connection.png) + +এই সার্ভিসগুলোতে সংযোগ স্থাপন এবং ডেটা প্রেরণ করতে পারে এমন সমস্ত ডিভাইস সম্পর্কে তথ্য নিয়ে, তারপর তাদের সুরক্ষা বাস্তবায়িত করে। এটি করার জন্য হয় সার্ভিসের সাথে ডিভাইসগুলিকে প্রাক-নিবন্ধভুক্ত করে অথবা ডিভাইসগুলিকে গোপনীয় চাবি বা সার্টিফিকেট দিয়ে তারা প্রথমবার সার্ভিসে নিবন্ধিত করে। এক্ষেত্রে অজানা(Unknown) ডিভাইসগুলি সংযোগ করতে অক্ষম, যদি তারা তা করার চেষ্টা করে, তবে সার্ভিস সেসকল সংযোগ প্রত্যাখ্যান করে এবং তাদের দ্বারা প্রেরিত বার্তাগুলি উপেক্ষা করে। + +✅ কিছু গবেষণা করা যাক: যেকোন ডিভাইস বা কোড সংযোগ করতে পারে- এমন উন্মুক্ত আইওটি পরিষেবা নেওয়ার নেতিবাচক দিক কী? হ্যাকাররা এগুলো ব্যবহার করেছে - এমন নির্দিষ্ট উদাহরণ কী আছে? + +আমাদের অ্যাপ্লিকেশনটির অন্যান্য উপাদানগুলি আইওটি সার্ভিসে সংযুক্ত হতে পারে এবং সংযুক্ত বা নিবন্ধিত সমস্ত ডিভাইসগুলি সম্পর্কে জানতে এবং তাদের সাথে সরাসরি একত্রে বা স্বতন্ত্রভাবে যোগাযোগ করতে পারে + +> 💁 আইওটি সার্ভিসগুলি অতিরিক্ত সক্ষমতা ব্যবহার করে এবং ক্লাউড সরবরাহকারীদের কাছে অতিরিক্ত পরিষেবা এবং অ্যাপ্লিকেশন রয়েছে যা সার্ভিসের সাথে সংযুক্ত হতে পারে। উদাহরণস্বরূপ, আমরা যদি আমাদের ডিভাইসগুলো দ্বারা প্রেরিত সকল টেলিমেট্রি বার্তাগুলি সংরক্ষণ করতে চাই নির্দিষ্ট কোন ডাটাবেসে, তবে ক্লাউড সরবরাহকারীর কনফিগারেশন ট্যুল থেকে গোটা সার্ভিসটিকে একটি ডাটাবেসে সংযুক্ত করতে এবং ডেটা স্ট্রিম করার জন্য - কেবলমাত্র কয়েকটি ক্লিকই যথেষ্ট। + +## ক্লাউডে IoT সার্ভিস তৈরী করা + +এখন আমাদের কাছে অ্যাজুর সাবস্ক্রিপশন রয়েছে, আমরা একটি আইওটি সার্ভিসে সাইন আপ করতে পা্রি। মাইক্রোসফ্ট থেকে আইওটি পরিষেবাটিকে বলা হয় Auzre IoT Hub । + +![The Azure IoT Hub logo](../../../../images/azure-iot-hub-logo.png) + +নীচের ভিডিওটিতে অ্যাজুরে আইওটি হাবের একটি সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে: + +[![Overview of Azure IoT Hub video](https://img.youtube.com/vi/smuZaZZXKsU/0.jpg)](https://www.youtube.com/watch?v=smuZaZZXKsU) + +> 🎥 ভিডিও দেখতে উপরের চিত্রটি ক্লিক করতে হবে। + +✅ কিছু অতিরিক্ত বিষয় শিখতে এবং আইওটি হাব সম্পর্কে জানতে [Microsoft IoT Hub documentation](https://docs.microsoft.com/azure/iot-hub/about-iot-hub?WT.mc_id=academic-17441-jabenn) পড়া বেশ ভালো একটি উপায়। + +Azure ক্লাউড সার্ভিসগুলো ওয়েব-ভিত্তিক পোর্টাল বা কমান্ড-লাইন ইন্টারফেসের (সিএলআই) মাধ্যমে কনফিগার করা যেতে পারে। এই কাজের জন্য, আমরা সিএলআই(CLI) ব্যবহার করব। + +### কাজ - Azure CLI ইন্সটল করা + +Azure CLI ব্যবহার করার জন্য প্রথমে এটি আমাদের পিসি বা ম্যাকে ইনস্টল করা আবশ্যক। + +1. Azure CLI ইনস্টল করার জন্য [Azure CLI documentation](https://docs.microsoft.com/cli/azure/install-azure-cli?WT.mc_id=academic-17441-jabenn) পেইজ অনুসরণ করতে হবে। + +1. অ্যাজুর সিএলআই কয়েকটি এক্সটেনশন সাপোর্ট করে যা বিস্তৃত অ্যাজুর পরিষেবাদি পরিচালনা করার সক্ষমতা বাড়ায়। আমাদের কমান্ড লাইন বা টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালিয়ে আইওটি এক্সটেনশন ইনস্টল করতে হবে: + + ```sh + az extension add --name azure-iot + ``` + +1. কমান্ড লাইন বা টার্মিনাল থেকে, আজুর সিএলআই এর মাধ্যমে অ্যাজুর সাবস্ক্রিপশনে লগ ইন করতে নিম্নলিখিত কমান্ডটি চালাতে হবে। + + ```sh + az login + ``` + + ডিফল্ট ব্রাউজারে একটি ওয়েবপেইজ চালু হবে। আমরা আজুর সাবস্ক্রিপশনের জন্য সাইন আপ করতে যে অ্যাকাউন্টটি ব্যবহার করেছি, তা ব্যবহার করেই লগ ইন করতে হবে। একবার লগ ইন হয়ে গেলে, ব্রাউজার ট্যাবটি বন্ধ করে দেয়া যাবে। + +1. কারো যদি একাধিক Azure সাবস্ক্রিপশন থাকে, যেমন শিক্ষাপ্রতিষ্ঠানের সরবরাহ করা সাবস্ক্রিপশন, আবার একটি নিজস্ব Student subscription - যেটিই ব্যবহার করতে চাইবো, সেটি সিলেক্ট করতে হবে।আমাদের যে সমস্ত সাবস্ক্রিপশনে অ্যাক্সেস রয়েছে তা তালিকাভুক্ত করতে নিম্নলিখিত কমান্ডটি চালালেই হবে: + + ```sh + az account list --output table + ``` + + আউটপুটে সাবস্ক্রিপশনের নাম এবং `SubscriptionId` দেখা যাবে। + + ```output + ➜ ~ az account list --output table + Name CloudName SubscriptionId State IsDefault + ---------------------- ----------- ------------------------------------ ------- ----------- + School-subscription AzureCloud cb30cde9-814a-42f0-a111-754cb788e4e1 Enabled True + Azure for Students AzureCloud fa51c31b-162c-4599-add6-781def2e1fbf Enabled False + ``` + + যে সাবস্ক্রিপশনটি ব্যবহার করতে চাই, তা নির্বাচন করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে হবে: + + ```sh + az account set --subscription + ``` + + `` এর জায়গায় আমরা যে সাবস্ক্রিপশন ব্যবহার করতে চাই, সেটির আইডি দিতে হবে। এই কমান্ডটি চালানোর পরে, আমাদের অ্যাকাউন্টগুলি তালিকাভুক্ত করতে কমান্ডটি আবার চালাতে হবে। তখন `IsDefault` কলামটি `True` হিসেবে মার্ক করা থাকবে আমাদের ব্যবহৃত সাবস্ক্রিপশন এর জন্য । + +### কাজ - রিসোর্স গ্রুপ তৈরী + +আইওটি হাবের ভার্চুয়াল মেশিন, ডাটাবেস, বা এআই পরিষেবাগুলির মতো অ্যাজুর পরিষেবাগুলিকে **রিসোর্স** হিসাবে উল্লেখ করা হয়। প্রতিটি রিসোর্স একটি **রিসোর্স গ্রুপ** এর মধ্যে থাকতে হয়, যা এক বা একাধিক রিসোর্সের যৌক্তিক গ্রুপিং। + +> 💁 রিসোর্স গ্রুপগুলি ব্যবহার করার অর্থ আমরা একবারে একাধিক সার্ভিস পরিচালনা করতে পারব। উদাহরণস্বরূপ, একবার আমরা এই প্রজেক্টের সমস্ত পাঠ শেষ করে নেওয়ার পরে, রিসোর্স গ্রুপ ডিলিট করে দেয়া যাবে এবং এতে থাকা সমস্ত রিসোর্স স্বয়ংক্রিয়ভাবে ডিলিট হবে। + +1. বিশ্বজুড়ে বিভিন্ন অঞ্চলে একাধিক Azure ডেটা সেন্টার রয়েছে। আমরা যখন একটি অ্যাজুর রিসোর্স বা রিসোর্স গ্রুপ তৈরি কর্রি, তখন আমাদেরকে মাথায় রাখতে হবে যে এটি আমরা কোথায় তৈরি করতে চাই। বিভিন্ন অবস্থানের তালিকা পেতে নিম্নলিখিত কমান্ডটি চালানো যাবে: + + ```sh + az account list-locations --output table + ``` + + অবস্থানের একটি দীর্ঘ তালিকা দেখা যাবে। + + > 💁 এই লেসন লেখার সময়, 65 টি অবস্থান রয়েছে যেখানে আমরা আমাদের রিসোর্স রাখতে পারি। + + ```output + ➜ ~ az account list-locations --output table + DisplayName Name RegionalDisplayName + ------------------------ ------------------- ------------------------------------- + East US eastus (US) East US + East US 2 eastus2 (US) East US 2 + South Central US southcentralus (US) South Central US + ... + ``` + + `Name` কলামের ভ্যালুগুলো নোট রাখতে হবে যেগুলো আমাদের আশাপাশে বা নিকটে রয়েছে। ম্যাপ থেকে এগুলো দেখা যাবে [Azure geographies page](https://azure.microsoft.com/global-infrastructure/geographies/?WT.mc_id=academic-17441-jabenn) এ গিয়ে। + +1. নিচের কমান্ড রান করে `soil-moisture-sensor` নামক রিসোর্স গ্রুপ তৈরী করতে হবে। রিসোর্স গ্রুপের নামগুলি একটি সাবস্ক্রিপশনে অনন্য(unique) হতে হবে । + + ```sh + az group create --name soil-moisture-sensor \ + --location + ``` + + এখানে `` এর পবিবর্তে পূর্ববর্তী ধাপে নির্দিষ্টকৃত লোকেশন দিতে হবে। + +### কাজ - IoT Hub তৈরী + +আমরা এখন আমাদের রিসোর্স গ্রুপে একটি আইওটি হাব রিসোর্স তৈরি করতে পারি। + +1. নিচের কমান্ড ব্যবহার করে আইওটি হাব রিসোর্স তৈরি করি। + + ```sh + az iot hub create --resource-group soil-moisture-sensor \ + --sku F1 \ + --partition-count 2 \ + --name + ``` + + এখানে`` এর পরবর্তে আমাদের হাব এর নাম দিতে হবে। এই নাম বিশ্বজুড়ে ইউনিক বা একটিমাত্র হতে হবে - অন্য কোনও আইওটি হাব (যে কারও দ্বারা তৈরি) একই নাম এর হওয়া যাবেনা। কেননা এটি দ্বারা URL তৈরী করা হবে। এক্ষেত্রে `soil-moisture-sensor-` শব্দাংশের পর আমাদের নাম বা কোন সংখ্যা বা অন্য কিছু যোগ করে দেয়া যেতে পারে। + + `--sku F1` দ্বারা বোঝায় এটি free tier ব্যবহার করছে। Free tier দ্বারা প্রতিদিন ৮০০০ ম্যাসেজ আদান প্রদান করা যায়। + + > 🎓অ্যাজুর সার্ভিসের বিভিন্ন মূল্যের স্তরগুলিকে 'TIER' হিসাবে উল্লেখ করা হয়। প্রতিটি স্তরের আলাদা আলাদা খরচ থাকে এবং এগুলো বিভিন্ন বৈশিষ্ট্য বা ডেটা ভলিউম সরবরাহ করে। + + > 💁 খরচ সম্পর্কে আরো বিস্তারিত [Azure IoT Hub pricing guide](https://azure.microsoft.com/pricing/details/iot-hub/?WT.mc_id=academic-17441-jabenn) পড়লে জানা যাবে। + + এখানে `--partition-count 2` নির্দিষ্ট করে যে এই হাব কয়টি ডাটা স্ট্রীম ব্যবহার করবে। পার্টিশন বেশি থাকলে তা আইওটি হাব থেকে একাধিক জিনিস পড়া এবং লেখার সময় ডেটা ব্লকিং হ্রাস করে। Partitions নিয়ে এই লেসনে আলোচনা করার সুযোগ নেই, তবে free tier IoT Hub তৈরীর জন্য এর ভ্যালু দিতে হবে। + + > 💁 প্রতি সাবস্ক্রিপশনে সর্বোচ্চ ১টি free tier IoT Hub নেয়া যাবে। + +আইওটি হাব তৈরি হয়ে যাবে। এটি সম্পূর্ণ হতে এক মিনিট বা তার একটু বেশি সময় নেয়। + +## IoT Hub এর সাথে সংযোগ + +শপূর্ববর্তী পাঠে, আমরা এমকিউটিটি ব্যবহার করেছি এবং বিভিন্ন বিষয়ে বিভিন্ন উদ্দেশ্য নিয়ে বিভিন্ন বার্তা প্রেরণ করেছি। আইওটি হাবের বিভিন্ন বিষয়ের উপর বার্তা প্রেরণের পরিবর্তে হাবের সাথে যোগাযোগের জন্য একাধিক সুনির্দিষ্ট উপায় রয়েছে। + +> 💁 আইওটি হাব এবং ডিভাইসের মধ্যে এই যোগাযোগটি MQTT, HTTPS বা AMQP ব্যবহার করে করা যাবে। + +* ডিভাইস থেকে ক্লাউডে (D2C) বার্তা - these are messages sent from a device to IoT Hub, such as telemetry. They can then be read off the IoT Hub by your application code.এগুলি আইওটি হাবের কাছে টেলিমেট্রির মতো কোন ডিভাইস থেকে প্রেরিত বার্তা। এরপরে আমাদের অ্যাপ্লিকেশন কোড আইওটি হাব থেকে সেই ডেটা নিতে পারে। + + > 🎓 IoT Hub একটি Azure service ব্যবহার করে যার নাম [Event Hubs](https://docs.microsoft.com/azure/event-hubs/?WT.mc_id=academic-17441-jabenn)। আমরা যখন হাবটিতে প্রেরিত বার্তাগুলি পড়ার জন্য কোড লিখি, তখন এগুলোকে প্রায়শই ইভেন্ট হিসাবে বলা হয়। + +* ক্লাউড থেকে ডিভাইসে (C2D) বার্তা - আইওটি হাবের মাধ্যমে ডিভাইসে এসব বার্তা পাঠানো হয় এপ্লিকেশন কোড ব্যবহার করে। + +* ডিরেক্ট মেথড রিকুয়েস্ট - আইওটি হাবের মাধ্যমে ডিভাইসে এসব বার্তা পাঠানো হয় এপ্লিকেশন কোড ব্যবহার করে। সাধারণত এসব কোড ব্যবহার করা হয় যাতে ডিভাইসটি কোন কাজ করে, যেমন- একচুয়েটর নিয়ন্ত্রণ করার জন্য অনুরোধ করা। এই বার্তাগুলির একটি প্রতিক্রিয়া প্রয়োজন যাতে আমাদের অ্যাপ্লিকেশন কোডটি সফলভাবে প্রক্রিয়া করা হয়েছে কিনা বোঝা যায়। + +* ডিভাইস টুইন - এগুলি JSON ডকুমেন্ট যা ডিভাইস এবং আইওটি হাবের মধ্যে সামঞ্জস্যতা বজায় রাখে। এগুলো ব্যবহার করে সেটিং সমূহ এবং প্রপার্টিগুলো স্টোর করে রাখা হয় যা হয় ডিভাইস থেকে আসে অথবা আইওটি হাব কর্তৃক ডিভাইসে পাঠাতে হবে। + +আইওটি হাব একটি কনফিগারযোগ্য কোন নির্দিষ্ট সময়ের জন্য (ডিফল্ট ১দিন) ডিরেক্ট মেথড রিকুয়েস্ট এবং ম্যাসেজগুলো স্টোর করতে পারে। সুতরাং যদি কোন ডিভাইস বা অ্যাপ্লিকেশন কোড সংযোগ হারিয়ে ফেলে তবে এটি পুনরায় সংযোগের পরে অফলাইনে থাকা বার্তাগুলি পুনরুদ্ধার করতে পারে। ডিভাইস টুইনগুলো আইওটি হাবে স্থায়ীভাবে রাখা হয়, তাই যে কোনও সময় কোন ডিভাইস পুনরায় সংযোগ করতে পারে এবং সর্বশেষতম ডিভাইস টুইনে সংযোগ পেতে পারে। + +✅ ছোট একটি কাজ করা যাকঃ বিভিন্ন ধরণের ম্যাসেজ সম্পর্কে আরো জানতে [Device-to-cloud communications guidance](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-d2c-guidance?WT.mc_id=academic-17441-jabenn) এবং [Cloud-to-device communications guidance](https://docs.microsoft.com/azure/iot-hub/iot-hub-devguide-c2d-guidance?WT.mc_id=academic-17441-jabenn) পড়া উচিত হবে। + +## IoT সার্ভিসগুলোর সাথে ডিভাইসের সংযোগ + +হাবটি তৈরি হয়ে গেলে, আমাদের আইওটি ডিভাইস এটির সাথে সংযোগ করতে পারবে। কেবল নিবন্ধিত ডিভাইসগুলিই কোন সার্ভিসে সংযোগ করতে পারে। তাই আমাদেরকে প্রথমে আমাদের ডিভাইসটি নিবন্ধিত করতে হবে। নিবন্ধন করার সময় সংযোগ স্ট্রিং (Connection String) পাওয়া যাবে যা ক্লাউডে সংযোগের জন্য ডিভাইসটি ব্যবহার করতে পারে। এই সংযোগ স্ট্রিংটি ডিভাইস-নির্দিষ্ট এবং এতে আইওটি হাব, ডিভাইস এবং একটি গোপন কী রয়েছে যা এই ডিভাইসটিকে সংযোগ করার অনুমতি দেয়। + +> 🎓 সংযোগ স্ট্রিং (Connection String) একটি জেনেরিক শব্দ যা সংযোগের তথ্য বিশিষ্ট কিছু টেক্সট এর একটি সমন্বয়। আইওটি হাব, ডাটাবেস এবং অন্যান্য অনেক পরিষেবাতে সংযোগ করার সময় এগুলি ব্যবহৃত হয়। এগুলিতে সাধারণত সার্ভিসের জন্য একটি শনাক্তকারী, যেমন একটি URL এবং সুরক্ষা তথ্য যেমন একটি গোপন কী থাকে। পরিষেবাগুলিতে যুক্ত হওয়ার জন্য এগুলিকে SDK এর মাধ্যমেই সংযোগ দেওয়া হয়। + +> ⚠️ সংযোগ স্ট্রিংগুলি (Connection Strings) সুরক্ষিত রাখতে হবে! সামনের লেসনগুলোতে নিরাপত্তা বিষয়টি আরও বিস্তারিতভাবে ব্যখ্যা করা হবে। + +### কাজ - IoT ডিভাইসের নিবন্ধন (Registration) + +আইওটি ডিভাইস Azure CLI ব্যবহার কর আইওটি হাবের সাথে নিবন্ধনভুক্ত হতে পারে। + +1. একটি ডিভাইসকে রেজিস্টার করতে, নিম্নের কমান্ডটি রান করতে হবে + + ```sh + az iot hub device-identity create --device-id soil-moisture-sensor \ + --hub-name + ``` + + এখানে `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। + + আমরা `soil-moisture-sensor` এর জন্য একটি ডিভাইস আইডি পাবো। + +1. যখন আইওটি ডিভাইসটি SDK ব্যবহার করে , আইওটি হাবের সাথে সংযুক্ত হয়, তখন একটি সংযোগ স্ট্রিং ব্যবহার করতে হবে যা একটি গোপন কী সহ হাবের URL দেয়। সংযোগের স্ট্রিং পেতে নিম্নলিখিত কমান্ডটি চালাতে হবে: + + ```sh + az iot hub device-identity connection-string show --device-id soil-moisture-sensor \ + --output table \ + --hub-name + ``` + + এখানে `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। + +1. আউটপুটে আসা কানেকশন স্ট্রিং কোথাও লিখে রাখতে হবে। পরবর্তীতে এটির দরকার হবে। + +### কাজ - IoT ডিভাইসকে ক্লাউডের সাথে যুক্ত করা + +নিম্নের যেকোন একটি প্রাসঙ্গিক গাইড ধরে, প্রাথমিক কাজগুলো সম্পন্ন করতে হবে। + +* [Arduino - Wio Terminal](wio-terminal-connect-hub.md) +* [Single-board computer - Raspberry Pi/Virtual IoT device](single-board-computer-connect-hub.md) + +### কাজ - ইভেন্টগুলো পর্যবেক্ষণ + +এখনই আমরা আমাদের সার্ভার কোড আপডেট করবোনা। এর পরিবর্তে আইওটি ডিভাইস থেকে ইভেন্টগুলি নিরীক্ষণ করতে Azure CLI ব্যবহার করবো। + +1. এটি নিশ্চিত করতে হবে যে আমাদের আইওটি ডিভাইসটি চলছে এবং মাটির আর্দ্রতা টেলিমেট্রি মানগুলি প্রেরণ করছে । + +1. আইওটি হাবে আসা ম্যাসেজগুলো দেখতে কমান্ড প্রম্পট বা টার্মিনাল থেকে নিম্নের কোড কমান্ড রান করি। + + ```sh + az iot hub monitor-events --hub-name + ``` + + এখানে `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। + + কনসোল আউটপুটে ম্যাসেজগুলো তখন দেখাবেঃ + + ```output + Starting event monitor, use ctrl-c to stop... + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "payload": "{\"soil_moisture\": 376}" + } + }, + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "payload": "{\"soil_moisture\": 381}" + } + } + ``` + + এখানে `payload` এর কনটেন্টগুলো আইওটি ডিভাইসে আসা ম্যাসেজের সাথে মিলবে। + +1. এই বার্তাগুলিতে তাদের সাথে স্বয়ংক্রিয়ভাবে সংযুক্ত থাকা অসংখ্য বৈশিষ্ট্য রয়েছে, যেমন টাইমস্ট্যাম্প। এগুলি *annotations* বা টীকা হিসাবে পরিচিত। সমস্ত বার্তা টীকা বা message annotations দেখতে, নিম্নলিখিত কমান্ড ব্যবহার করতে হবে: + + ```sh + az iot hub monitor-events --properties anno --hub-name + ``` + + `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। + + আইওটি ডিভাইস দ্বারা প্রেরিত হওয়ার সাথে সাথে বার্তাগুলি কনসোল আউটপুটে প্রদর্শিত হবে। + + ```output + Starting event monitor, use ctrl-c to stop... + { + "event": { + "origin": "soil-moisture-sensor", + "module": "", + "interface": "", + "component": "", + "properties": {}, + "annotations": { + "iothub-connection-device-id": "soil-moisture-sensor", + "iothub-connection-auth-method": "{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}", + "iothub-connection-auth-generation-id": "637553997165220462", + "iothub-enqueuedtime": 1619976150288, + "iothub-message-source": "Telemetry", + "x-opt-sequence-number": 1379, + "x-opt-offset": "550576", + "x-opt-enqueued-time": 1619976150277 + }, + "payload": "{\"soil_moisture\": 381}" + } + } + ``` + + এনোটেশন গুলোর সময়ের ভ্যালু [UNIX time](https://wikipedia.org/wiki/Unix_time) এ প্রদর্শিত, যা ১জানুয়ারি, ১৯৭০ মধ্যরাত থেকে কত সেকেন্ড হয়েছে তা দেখায়। + + কাজ শেষে ইভেন্ট মনিটর থেকে এক্সিট করতে হবে। + +### কাজ - IoT device নিয়ন্ত্রণ + +Azure CLI ব্যবহার করে direct method এ IoT device এ যোগাযোগ করা যাবে। + +1. `relay_on` মেথড শুরু করতে কমান্ড প্রম্পট বা টার্মিনালে নিম্নের কমান্ড রান করিঃ + + ```sh + az iot hub invoke-device-method --device-id soil-moisture-sensor \ + --method-name relay_on \ + --method-payload '{}' \ + --hub-name + ``` + + `` এর পরিবর্তে আমাদের ব্যবহৃত নামটি দিতে হবে। + + এটি `method-name` নামক মেথডের জন্য direct method এর রিকুয়েস্ট পাঠাবে। এগুলো একটি payload (যাতে মেথডের ডেটা রয়েছে) নিতে পারে এবং এটিকে `method-payload` প্যারামিটার হিসেবে JSON এ সুনির্দিষ্ট করতে হবে। + + রিলে চালু হবে এবং আউটপুটে আসবেঃ + + ```output + Direct method received - relay_on + ``` + +1. পূর্বের ধাপ আবারো করতে হবে, তবে `--method-name` পরিবর্তন করে `relay_off` দিতে হবে। তখন দেখা যাবে যে রিলে বন্ধ হয়ে গিয়েছে এবং আইওটি ডিভাইস থেকে সেরকম আউটপুটই আসবে। + +--- + +## 🚀 চ্যালেঞ্জ + +IoT Hub এর free tier দৈনিক ৮০০০ ম্যাসেজ এর সুযোগ দেয়। আমাদের কোডে প্রতি ১০ সেকেন্ডে একটি করে ম্যাসেজ যায়। তাহলে দৈনিক কতটি ম্যাসেজ হচ্ছে ? + +একটু ভাবতে হবে যে কতটা সময় পরপর আর্দ্রতার মান জানলে আমাদের কাজ চলবে। Free tier এর ভিতরে থাকার জন্য কোড কীভাবে পরিবর্তন করতে হবে এবং ঘন ঘন মান না নিয়ে, শুধু প্রয়োজনের সময়ই দেখলাম - এটা কীভাবে করা যাবে? দ্বিতীয় আরেকটি ডিভাইস এখানে যুক্ত করলে সেক্ষেত্রে কী হবে? + +## লেকচার পরবর্তী কুইজ + +[লেকচার-পরবর্তী কুইজ](https://brave-island-0b7c7f50f.azurestaticapps.net/quiz/16) + +## রিভিউ এবং স্ব-অধ্যয়ন + +IoT Hub SDK আরডুইনো এবং পাইথন উভয়ের জন্যই ওপেন সোর্স। গিটহাবে অনেকগুলো নমুনা রয়েছে আইওটি হাবের সাথে ব্যবহারের। + +* Wio Terminal ব্যবহার করলে [Arduino samples on GitHub](https://github.com/Azure/azure-iot-pal-arduino/tree/master/pal/samples) দেখা উচিত। +* Raspberry Pi অথবা Virtual device ব্যবহার করলে [Python samples on GitHub](https://github.com/Azure/azure-iot-sdk-python/tree/master/azure-iot-hub/samples)দেখা উচিত। + +## এসাইনমেন্ট + +[ক্লাউড সার্ভিসের ব্যাপারে জানা](assignment.bn.md) + diff --git a/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/assignment.bn.md b/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/assignment.bn.md new file mode 100644 index 00000000..c18b9628 --- /dev/null +++ b/2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/assignment.bn.md @@ -0,0 +1,19 @@ +# ক্লাউড সার্ভিসের ব্যাপারে জানা + +## নির্দেশাবলী + +ক্লাউড সার্ভিসগুলো, যেমন মাইক্রোসফট এর Azure, শুধুমাত্র একটা কম্পিউটার আমাদের ব্যবহার করতে দিলো - ব্যাপারটি আসলে এমন নয়। এখানে যেসকল সার্ভিস থাকে, সেগুলো হলোঃ + +* Infrastructure as a service (IaaS) +* Platform as a service (PaaS) +* সার্ভারবিহীন পরিষেবা +* Software as a service (SaaS) + +এই বিভিন্ন ধরণের অফার সম্পর্কে জানতে হবে এবং সেগুলি কী এবং কীভাবে তারা পৃথক তা ব্যাখ্যা করতে হবে। আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক তা জানতে হবে। + +## এসাইনমেন্ট মূল্যায়ন মানদন্ড + +| ক্রাইটেরিয়া | দৃষ্টান্তমূলক (সর্বোত্তম) | পর্যাপ্ত (মাঝারি) | উন্নতি প্রয়োজন (নিম্নমান) | +| -------- | --------- | -------- | ----------------- | +| ক্লাউডের বিভিন্ন ধরণের অফার ব্যখ্যা করা | ৪ ধরণের অফার বিষদভাবে ব্যখ্যা করেছে | কেবল ৩ ধরণের অফার ব্যখ্যা করেছে | কেবল দুয়েক ধরণের অফার ব্যখ্যা করেছে | +| কোন অফারটি আইওটি এর জন্য ভালো তা ব্যখ্যা করা |আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক এবং এর কারণ ব্যাখ্যা করেছে | আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক কিন্তু এর কারণ ব্যাখ্যা করতে পারেনি | আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক তা বর্ণনা করতে পারেনি | diff --git a/translations/README.bn.md b/translations/README.bn.md index a8ed3edb..d15911b9 100644 --- a/translations/README.bn.md +++ b/translations/README.bn.md @@ -4,9 +4,9 @@ [![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/IoT-For-Beginners.svg)](https://GitHub.com/microsoft/IoT-For-Beginners/pulls/) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/IoT-For-Beginners.svg?style=social&label=Watch&maxAge=2592000)](https://GitHub.com/microsoft/IoT-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/IoT-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/IoT-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Sta)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) # বিগিনারদের জন্য আইওটি - একটি সুবিন্যস্ত পাঠ্যক্রম @@ -14,11 +14,11 @@ প্রজেক্টগুলোতে খামার থেকে টেবিল পর্যন্ত খাদ্যের অভূতপূর্ব একটি যাত্রা আমরা উপভোগ করবো, শিখবো। এর মধ্যে রয়েছে কৃষিকাজ, প্রক্রিয়া ব্যবস্থাপনা, উৎপাদন, খুচরা ও গ্রাহকপর্যায় সহ আইওটি ডিভাইসের জন্য জনপ্রিয় সব ক্ষেত্র। -![A road map for the course showing 24 lessons covering intro, farming, transport, processing, retail and cooking](sketchnotes/Roadmap.jpg) +![A road map for the course showing 24 lessons covering intro, farming, transport, processing, retail and cooking](../sketchnotes/Roadmap.jpg) -> স্কেচনোটটি তৈরী করেছেন [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), [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/).** @@ -26,15 +26,9 @@ > **শিক্ষার্থীরা**, এই কোর্সটি নিজে ব্যবহার করতে চাইলে, পুরো রেপোসিটরি 'fork' করতে হবে এবং লেকচার-পূর্ববর্তী কুইজ দিয়ে শুরু করতে হবে। তারপরে লেকচারটি পড়ে এবং বাকি কাজগুলো বুঝে, নিজেই অনুশীলনগুলি সম্পূর্ণ করতে হবে। সমাধান কোডগুলো কপি না করে, বরং লেসনগুলি বোঝার মাধ্যমে প্রজেক্টগুলি তৈরি করার চেষ্টা করতে হবে। তবে হ্যাঁ, সল্যুশন কোডগুলো প্রতিটি প্রজেক্ট-ভিত্তিক লেসনের সমাধান ফোল্ডারে পাওয়া যাবে। আরেকটি পরামর্শ হলো বন্ধুদের সাথে একটি স্টাডি গ্রুপ গঠন করা এবং একসাথে লেসনগুলোর মধ্য দিয়ে যাওয়া। আরও বেশি শেখার জন্য, [Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn) ব্যবহার করা যাবে। - +> 🎥 উপরের ছবিতে ক্লিক করলেই এই পুরো কারিক্যুলামটি সম্পর্কে জানা যাবে। ## শিক্ষাপদ্ধতি @@ -54,7 +48,7 @@ ## প্রতিটি পাঠে রয়েছে: -- (অপশনাল) স্কেচনোট +- স্কেচনোট - (অপশনাল)পরিপূরক ভিডিও - লেকচার-পূর্ববর্তী কুইজ - লিখিত লেসন @@ -77,8 +71,8 @@ | 04 | [IoT যাত্রার সূচনা](./1-getting-started) | আইওটি ডিভাইসকে ইন্টারনেটে সংযুক্ত করা | এমকিউটিটি ব্রোকারের সাথে নাইটলাইটটি সংযুক্ত করে বার্তাগুলি প্রেরণ এবং গ্রহণ করতে আইওটি ডিভাইসটিকে কীভাবে ইন্টারনেটে সংযুক্ত করতে হবে সেই সংক্রান্ত জ্ঞান অর্জন | [আইওটি ডিভাইসকে ইন্টারনেটে সংযুক্তকরণ ](./1-getting-started/lessons/4-connect-internet/translations/README.bn.md) | | 05 | [ফার্ম](./2-farm) | আইওটি দ্বারা উদ্ভিদ বৃদ্ধির পূর্বাভাস | আইওটি ডিভাইস দ্বারা গৃহিত তাপমাত্রার ডেটা ব্যবহার করে কীভাবে উদ্ভিদ বৃদ্ধির পূর্বাভাস দেওয়া যায় তা শেখা | [আইওটি দ্বারা উদ্ভিদ বৃদ্ধির পূর্বাভাস](./2-farm/lessons/1-predict-plant-growth/translations/README.bn.md) | | 06 | [ফার্ম](./2-farm) | মাটির আর্দ্রতা নির্ণয় | কীভাবে মাটির আর্দ্রতা সনাক্ত করা যায় এবং তা করতে মাটির আর্দ্রতা সেন্সরটি কীভাবে ক্যালিব্রেট করতে হবে তা শেখা | [মাটির আর্দ্রতা নির্ণয়](./2-farm/lessons/2-detect-soil-moisture/translations/README.bn.md) | -| 07 | [ফার্ম](./2-farm) | Automated plant watering | রিলে এবং এমকিউটিটি ব্যবহার করে কীভাবে স্বয়ংক্রিয়ভাবে এবং নির্দিষ্ট সময়ে সেচ দেয়া যায় সে সংক্রান্ত জ্ঞান অর্জন | [Automated plant watering](./2-farm/lessons/3-automated-plant-watering/README.md) | -| 08 | [ফার্ম](./2-farm) | Migrate your plant to the cloud | ক্লাউড এবং ক্লাউড-হোস্ট করা আইওটি পরিষেবাগুলি সম্পর্কে জ্ঞান অর্জন এবং কীভাবে আমাদের উদ্ভিদটিকে পাবলিক এমকিউটিটি ব্রোকারের পরিবর্তে ক্লাউডে সংযুক্ত করতে হবে তা শেখা | [Migrate your plant to the cloud](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md) | +| 07 | [ফার্ম](./2-farm) | স্বয়ংক্রিয় সেচকার্য | রিলে এবং এমকিউটিটি ব্যবহার করে কীভাবে স্বয়ংক্রিয়ভাবে এবং নির্দিষ্ট সময়ে সেচ দেয়া যায় সে সংক্রান্ত জ্ঞান অর্জন | [স্বয়ংক্রিয় সেচকার্য](./2-farm/lessons/3-automated-plant-watering/translations/README.bn.md) | +| 08 | [ফার্ম](./2-farm) | উদ্ভিদকে ক্লাউডে সংযুক্ত করা | ক্লাউড এবং ক্লাউড-হোস্ট করা আইওটি পরিষেবাগুলি সম্পর্কে জ্ঞান অর্জন এবং কীভাবে আমাদের উদ্ভিদটিকে পাবলিক এমকিউটিটি ব্রোকারের পরিবর্তে ক্লাউডে সংযুক্ত করতে হবে তা শেখা | [উদ্ভিদকে ক্লাউডে সংযুক্ত করা](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/translations/README.bn.md) | | 09 | [ফার্ম](./2-farm) | Migrate your application logic to the cloud | ক্লাউডে কীভাবে অ্যাপ্লিকেশন লজিক লিখতে হবে যাতে তা আইওটি ম্যাসেজের প্রতিক্রিয়া জানাতে পারে তা শেখা| [Migrate your application logic to the cloud](./2-farm/lessons/5-migrate-application-to-the-cloud/README.md) | | 10 | [ফার্ম](./2-farm) | Keep your plant secure | আইওটি তে নিরাপত্তা সম্পর্কে জানা এবং Key ও Certificate এর সাহায্যে আমাদের উদ্ভিদটিকে কীভাবে সুরক্ষিত রাখা যায় তা শেখা | [Keep your plant secure](./2-farm/lessons/6-keep-your-plant-secure/README.md) | | 11 | [পরিবহন](./3-transport) | Location tracking | আইওটি ডিভাইসে জিপিএস লোকেশন ট্র্যাকিং শেখা | [Location tracking](./3-transport/lessons/1-location-tracking/README.md) | @@ -111,7 +105,7 @@ npm run convert ## সাহায্য প্রয়োজন! -অনুবাদের কাজ করে এই কারিক্যুলামে অবদান করতে চান? তাহলে অনুগ্রহ করে আমাদের [অনুবাদ গাইডলাইন](translations/TRANSLATIONS.bn.md) পড়ে , যেকোন একটি [Translation Issue](https://github.com/microsoft/IoT-For-Beginners/issues)তে ইনপুট দেয়ার অনুরোধ করা হলো। যদি কোন নতুন ভাষায় অনুবাদ করতে কেউ আগ্রহী হয়, তবে ট্র্যাকিংয়ের জন্য দয়া করে একটি নতুন Issue সাবমিট করতে হবে। +অনুবাদের কাজ করে এই কারিক্যুলামে অবদান করতে চান? তাহলে অনুগ্রহ করে আমাদের [অনুবাদ গাইডলাইন](translations/TRANSLATIONS.bn.md) পড়ে , যেকোন একটি [Translation Issue](https://github.com/microsoft/IoT-For-Beginners/issues?q=is%3Aissue+is%3Aopen+label%3Atranslation) এ ইনপুট দেয়ার অনুরোধ করা হলো। যদি কোন নতুন ভাষায় অনুবাদ করতে কেউ আগ্রহী হয়, তবে ট্র্যাকিংয়ের জন্য দয়া করে একটি নতুন Issue সাবমিট করতে হবে। ## অন্য পাঠ্যক্রম সমূহ From a143e9e048b7823171fd0f7ebb05edcf8f5a77fc Mon Sep 17 00:00:00 2001 From: Mireille T <69097387+Mireille-T@users.noreply.github.com> Date: Thu, 15 Jul 2021 05:48:46 +0800 Subject: [PATCH 3/6] Create wio-terminal.zh.md (#206) Simplified Chinese translation of wio-terminal.md Co-authored-by: Jim Bennett --- .../translations/wio-terminal.zh.md | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh.md diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh.md b/1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh.md new file mode 100644 index 00000000..c55e97e2 --- /dev/null +++ b/1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh.md @@ -0,0 +1,197 @@ +# Wio 终端 + +[Seeed Studios 的 Wio 终端](https://www.seeedstudio.com/Wio-Terminal-p-4509.html) 是个Arduino兼容的微控制器;无线上网以及一些感应器和执行器已经被装上,还有端口让你用叫做 [Grove](https://www.seeedstudio.com/category/Grove-c-1003.html) 的硬件生态系统加更多感应器和执行器。 + +![一个 Seeed Studios Wio 终端](../../../images/wio-terminal.png) + +## 设置 + +想用你个 Wio 终端,你必须在你的电脑上安装几个免费软件。你也需要在连接无线上网前更新 Wio 终端的固件。 + +### 任务:设置 + +安装需要的软件以及更新固件。 + +1. 安装 Visual Studio Code (VS Code)。这是你将用来写 C 或 C++ 的设备代码的编辑器。在 [VS Code 文档](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) 找一下安装 VS Code 的指示。 + + > 💁 另外一个为 Arduino 开发的 IDE 是 [Arduino IDE](https://www.arduino.cc/en/software)。如果你已经对这个工具熟悉,那你可以把它用来代替 VS Code 和 PlatformIO,但这个课程的指示将基于 VS Code。 + +1. 安装 VS Code 的 PlatformIO 扩展。这是支持用 C 或 C++ 来为微控制器写编码的 VS Code 扩展。在 [PlatformIO 扩展文档](https://marketplace.visualstudio.com/items?itemName=platformio.platformio-ide&WT.mc_id=academic-17441-jabenn) 找一下在 VS Code 安装扩展的指示。这个扩展依赖着Microsoft C/C++ 扩展来与 C 和 C++ 代码工作,而这个C/C++ 扩展在默认情况下会被安装当你安装 PlatformIO。 + +1. 将你的 Wio 终端连接到你的电脑。Wio 终端底下有个 USB-C 端口,而它需要连接到你的电脑的一个 USB 端口。Wio 终端包括一个 USB-C 至 USB-A 电缆,但万一你的电脑只有 USB-C 端口,那你就需要一个 USB-C 电缆或者一个 USB-A 至USB-C 适配器。 + +1. 按照 [Wio 终端 Wiki WiFi Overview 文档](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/) 的指示来设置你的 Wio 终端和更新固件。 + +## Hello world(你好,世界) + +第一次用新的编程语言或科技,通常以创建一个“Hello World”应用开始——一个输出像 `"Hello World"` 的字的小小应用,为了确保所有的工具被设置好。 + +Wio 终端的 Hello World 应用将确保你安装好了 Visual Studio Code 与 PlatformIO,并为微控制器开发做好设置。 + +### 创建一个 PlatformIO 项目 + +第一步是使用为 Wio 终端配置的 PlatformIO 创建一个新项目。 + +#### 任务:创建一个 PlatformIO 项目 + +创建 PlatformIO 项目。 + +1. 将 Wio 终端连接到你的电脑。 + +1. 启动 VS Code。 + +1. PlatformIO 的图表应该在旁边的菜单栏上: + + ![PlatformIO 菜单选项](../../../images/vscode-platformio-menu.png) + + 选择这个菜单项,再选择 *PIO Home -> Open* + + ![PlatformIO 的打开选项](../../../images/vscode-platformio-home-open.png) + +1. 从欢迎屏幕,选择 **+ New Project** 的按钮。 + + ![新项目的按钮](../../../images/vscode-platformio-welcome-new-button.png) + +1. 在 *Project Wizard* 配置项目: + + 1. 给你的项目取名为 `nightlight` + + 1. 从 *Board* 的下拉式选单,输入 `WIO` 来过滤板,再选择 *Seeeduino Wio Terminal* + +1. 将 *Framework* 保留为 *Arduino* + + 1. 选中 *Use default location* 复选框,或取消选中它并为你的项目选择一个位置 + + 1. 选择 **Finish** 的按钮 + + ![被完成的项目向导](../../../images/vscode-platformio-nightlight-project-wizard.png) + + PlatformIO 将下载它需要使用为 Wio 终端编译代码和创建项目的组件。它可能花几分钟。 + +### 调查 PlatformIO 项目 + +VS Code explorer 将显示PlatformIO向导创建的几个文件与文件夹。 + +#### 文件夹 + +* `.pio` - 这个文件夹包含 PlatformIO 需要的临时数据,例如:库或编译代码。万一它被删除,它就会自动重新创造,而如果你在GitHub或其它网络分享项目,你也不必把它加进源代码管理。 +* `.vscode` - 这个文件夹包含 PlatformIO 和 VS Code 用到的配置。万一它被删除,它就会自动重新创造,而如果你在GitHub或其它网络分享项目,你也不必把它加进源代码管理。 +* `include` - 这个文件夹是给添加其它库时所需的外部头文件。课程中你不会用到这个文件夹。 +* `lib` - 这个文件夹是给要从代码中调用的外部库。课程中你不会用到这个文件夹。* `src` - 这个文件夹包含你应用程序的主要源代码。一开始,它会包含一个文件—— `main.cpp`。 +* `test` - 这个文件夹是给你放代码的任何单元测试。 + +#### 文件 + +* `main.cpp` - 这个文件在 `src` 文件夹中;它包含应用程序的入口点,还有会包含以下的代码: + + ```cpp + #include + + void setup() { + // put your setup code here, to run once: + } + + void loop() { + // put your main code here, to run repeatedly: + } + ``` + + 当设备启动,Arduino 框架将运行一次`setup` 函数,然后重复运行 `loop` 函数,直到设备关闭。 + +* `.gitignore` - 这个文件列出了将代码添加到 git 源代码控制时(例如:上传到 GitHub 上的存储库)要忽略的文件和目录。 + +* `platformio.ini` - 这个文件包含你的设备和应用的配置。打开这个文件,它就包含以下的代码: + + ```ini + [env:seeed_wio_terminal] + platform = atmelsam + board = seeed_wio_terminal + framework = arduino + ``` + + `[env:seeed_wio_terminal]` 部分有 Wio 终端的配置。你可以有多数的 `env` 部分,让你的代码能为更多板编译。 + + 其它值与项目向导中的配置相匹配: + + * `platform = atmelsam` 定义了 Wio 终端使用的硬件(基于 ATSAMD51 的微控制器) + * `board = seeed_wio_terminal` 定义了微控制器板的类型(Wio 终端) + * framework = arduino` 定义这个项目使用 Arduino 框架。 + +### 写 Hello World 应用 + +你现在已准备好写 Hello World 应用。 + +#### 任务:写 Hello World 应用 + +写Hello World 应用。 + +1. 在 VS Code 打开 `main.cpp` 文件 + +1. 更改代码以匹配以下内容: + + ```cpp + #include + + void setup() + { + Serial.begin(9600); + + while (!Serial) + ; // Wait for Serial to be ready + + delay(1000); + } + + void loop() + { + Serial.println("Hello World"); + delay(5000); + } + ``` + + `setup`函数初始化与串行端口的连接;在这个情况下,用来将 Wio 终端连接到你的电脑的USB 端口。`9600` 参数是[波特率](https://wikipedia.org/wiki/Symbol_rate) (also known as Symbol rate),以每秒位数为单位的数据通过串行端口发送的速度。这个设置代表每秒发送 9,600 位(0 和 1)数据。 然后,它等待串行端口准备就绪。 + + `loop` 函数把 `Hello World!` 发送到串行端口,也就是 `Hello World!` 的字符与换行符。然后,它将花 5,000毫秒或 5 秒睡眠。当 `loop` 结束,它会重新运行,而只要微控制器上电,它会一直重新运行着。 + +1. 构建代码和把它上传到 Wio 终端 + + 1. 打开 VS Code 的命令面板 + + 1. 输入 `PlatformIO Upload` 来搜索上传选项,再选择 *PlatformIO: Upload* + + ![ 命令面板中 PlatformIO 的上传选项](../../../images/vscode-platformio-upload-command-palette.png) + + 如果有必要的话,PlatformIO上传代码前将自动构建代码。 + + 1. 代码将被编译并上传到 Wio 终端 + + > 💁 如果你正在用macOS, *DISK NOT EJECTED PROPERLY* 的通知将出现。这是因为 Wio 终端作为闪存过程的一部分安装为驱动器,并且在将编译的代码写入设备时断开连接。 你可以忽略这个通知。 + + ⚠️ 如果你收到关于上传端口不可用的错误消息,请首先确保你已经将 Wio 终端连接到你的电脑,并使用屏幕左侧的开关打开。 底部的绿灯应该亮着。 如果仍然出现错误,请快速连续两次拉下开关以强制 Wio 终端进入引导加载程序模式,然后再次尝试上传。 + +PlatformIO 有一个串行监视器,可以监视从 Wio 终端通过 USB 电缆发送的数据。 这允许你监视由`Serial.println("Hello World");` 命令发送的数据。 + +1. 打开 VS Code 的命令面板 + +1. 输入 `PlatformIO Serial` 来搜索串行监视器选项,再选择 *PlatformIO: Serial Monitor* + + ![ 命令面板中 PlatformIO 的串行监视器选项](../../../images/vscode-platformio-serial-monitor-command-palette.png) + + 这将打开一个新终端,而通过串行端口发送的数据将流入这个终端: + + ```output + > Executing task: platformio device monitor < + + --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time + --- More details at http://bit.ly/pio-monitor-filters + --- Miniterm on /dev/cu.usbmodem101 9600,8,N,1 --- + --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- + Hello World + Hello World + ``` + + 每 5 秒,`Hello World` 将打印在串行监视器上 + +> 💁 你可以在 [code/wio-terminal](code/wio-terminal) 文件夹找到这个代码。 + +😀 你的 “Hello World” 编码成功了! From 3d8fdc2f50e246c8621de3bc919bf1d89f6e5ef2 Mon Sep 17 00:00:00 2001 From: Mireille T <69097387+Mireille-T@users.noreply.github.com> Date: Thu, 15 Jul 2021 05:50:10 +0800 Subject: [PATCH 4/6] Create README.zh.md (#202) Chinese translation for README.md Co-authored-by: Jim Bennett --- translations/README.zh.md | 122 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 translations/README.zh.md diff --git a/translations/README.zh.md b/translations/README.zh.md new file mode 100644 index 00000000..73a90c2e --- /dev/null +++ b/translations/README.zh.md @@ -0,0 +1,122 @@ +[![GitHub license](https://img.shields.io/github/license/microsoft/IoT-For-Beginners.svg)](https://github.com/microsoft/IoT-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/IoT-For-Beginners.svg)](https://GitHub.com/microsoft/IoT-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/IoT-For-Beginners.svg)](https://GitHub.com/microsoft/IoT-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/IoT-For-Beginners.svg)](https://GitHub.com/microsoft/IoT-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/IoT-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/IoT-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/IoT-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/IoT-For-Beginners.svg?style=social&label=Sta)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) + +# 物联网(IoT for Beginners) – 课程 + +Microsoft 的 Azure Cloud 大使很高兴提供关于 IoT 基础一个12个星期、24课的课程。每一课包括课前和课后的知识检查、为了完成课的指示、解答、作业等。我们通过项目的教学让你一边创建,一边学习——一种有效率保留新技能的方式。 + +这些项目概括食物的路程——从农场到桌子。这包括农业、后勤、制造业、零售和消费者——都是 IoT 设备的热门行业。 + +![课程的路线图;它在 24 课概括简介、农业 +交通、处理、零售与烹饪](sketchnotes/Roadmap.jpg) + +> Sketchnote by [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 学生大使](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/).** + +> **老师们**,我们为这个课程的用法 [提供了一些意见](for-teachers.md)。如果你想自己创建课程,那我们也提供了一个[课程模板](lesson-template/README.md). + +> **学生们**, 为了自己用这个课程,请分叉整个存储库,再自己完成练习,从知识检查(初)开始,再阅读讲座,然后完成其它活动。试试以理解课程的内容来完成项目,而不要仅仅把代码答案抄下来;可是,在每个项目课程张,你能从 /solutions 文件夹访问那些代码。另外一个办法是跟朋友成立学习小组,然后一起分析内容。想进一步研究,我们鼓励你查一查[Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn)。 + + +[![宣传片](./images/iot-for-beginners.png)](https://youtube.com/watch?v=bccEMm8gRuc "Promo video") + +> 🎥 点击以上的图片来看这个项目的宣传片! + + +## 教学法 + +创建这个课程时,我们选择了两个教育原理:确保它基于项目以及它常常包括知识检查。完成课程后,学生们应该创建了一个植物监测和浇水系统、车辆追踪器、为了追踪和检查食物的智能工厂设置以及声控烹饪定时器,还有学会了物联网的基本技能,包括怎么为设备写代码、连接到云、分析遥测以及在边缘上运行人工智能。 + +当我们确保内容跟项目有连接,对学生来说,学习的过程会更加有趣,而这将让学生们更容易把概念记住。 + +此外,课前的一种低风险知识检查将帮学生为学某个题目树立目标,而课后的第二个知识检查确保他把内容记住。我们设计课程的其中一个目的是让它既灵活又有趣,也给学生们完成这个课程或者课程的一个部分的选择。项目一开始会小,但 12 星期的过程中,它就会变得越来越复杂。 + +每个项目基于在学生们和业余爱好者能把握到的物质硬件。每个项目调差某个项目领域,并提供相关的背景知识。想当个成功的开发者,理解问题的领域是有意义的,所以提供这些背景知识允许学生们在当个 IoT 开发者的景况下思考他们的IoT 解决方案和新知识。学生们将学到解决方案的理由,便得到最终使用者的赞赏。 + +## 硬件 + +根据你自己的选择、知道或喜欢的编码语言、学习目标等,我们对于项目的 IoT 硬件有两个选择。我们也提供了一个“虚拟硬件”的版本,为无法拿到硬件或者想在买硬件之前学多一点儿东西的人。你能在[硬件页](./hardware.md)找到更多资料与“购物清单”;它也包括来自我们朋友Seeed Studio完整套件的链接。 + +> 💁 找一下我们的[行为守则](CODE_OF_CONDUCT.md)、 [贡献](CONTRIBUTING.md)和 [翻译](TRANSLATIONS.md)的指导方针。 我们欢迎你的建设性反馈! + +## 每个课包括: + +- 涂鸦笔记(sketchnote) +- 可选的补充视频 +- 知识检查(初) +- 讲座 +- 为了基于项目的课,创建项目的分步说明 +- 知识检查 +- 挑战 +- 补充阅读 +- 作业 +- 知识检查(后) + +> **关于知识检查的注意**: 课前和课后的所有知识检查将在[这个应用中](https://brave-island-0b7c7f50f.azurestaticapps.net),总共有 48 知识检查,每个有三个问题。课中将有它们的链接,但这个应用也可以在本地运行;按照`quiz-app` 文件夹中的指示。它们正在逐渐本地化。 + +## 课程 + +| | 项目 | 题目 | 学习目标 | 链接 | +| :-: | :----------: | :-------------: | ------------------- | :-----------: | +| 01 | [入门](./1-getting-started) | 物联网(IoT)简介 | 学会 IoT 的基本原则(例如:感应器和云服务),同时设置你的第一个 IoT 设备| [物联网(IoT)简介](./1-getting-started/lessons/1-introduction-to-iot/README.md) | +| 02 | [入门](./1-getting-started) | 深入了解物联网(IoT) | 深入了解 IoT 系统的不同部分,以及微控制器和单板机 | [深入了解物联网(IoT)](./1-getting-started/lessons/2-deeper-dive/README.md) | +| 03 | [入门](./1-getting-started) | 用感应器和执行器跟物质世界互相作用 | 学会感应器怎么从物质世界收集数据和执行器怎么发送反馈,同时创建一个夜灯 | [用感应器和执行器跟物质世界互相作用](./1-getting-started/lessons/3-sensors-and-actuators/README.md) | +| 04 | [入门](./1-getting-started) | 将你的设备连接到互联网 | 学会怎么把一个 IoT 设备连接到互联网,将夜灯连接到MQTT 中转站让它发送和收到消息 | [将你的设备连接到互联网](./1-getting-started/lessons/4-connect-internet/README.md) | +| 05 | [农场](./2-farm) | 预测植物生长 | 学会怎么用 IoT 设备捕获的温度数据来预测植物生长 | [预测植物生长](./2-farm/lessons/1-predict-plant-growth/README.md) | +| 06 | [农场](./2-farm) | 检测土壤水分 | 学会怎么检测土壤水分以及校准土壤湿度传感器 | [检测土壤水分](./2-farm/lessons/2-detect-soil-moisture/README.md) | +| 07 | [农场](./2-farm) | 自动植物浇水 | 学会怎么用一个中继和 MQTT 为植物浇水使自动化和计时 | [自动植物浇水](./2-farm/lessons/3-automated-plant-watering/README.md) | +| 08 | [农场](./2-farm) | 将你的植物迁移到云端 | 了解云端和云端 IoT 服务与学会怎么把你的植物连接到它,而不是一个公共 MQTT中转站 | [将你的植物迁移到云端](./2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md) | +| 09 | [农场](./2-farm) | 将你的应用程序逻辑迁移到云端 | 学会怎么在云端写能够响应 IoT 消息的应用程序逻辑 | [将你的应用程序逻辑迁移到云端](./2-farm/lessons/5-migrate-application-to-the-cloud/README.md) | +| 10 | [农场](./2-farm) | 确保你的植物安全 | 了解 IoT 安全以及学会怎么用密钥和证书来确保你的植物安全 | [确保你的植物安全](./2-farm/lessons/6-keep-your-plant-secure/README.md) | +| 11 | [交通](./3-transport) | 位置追踪 | 了解 IoT 设备的 GPS位置追踪 | [位置追踪](./3-transport/lessons/1-location-tracking/README.md) | +| 12 | [交通](./3-transport) | 存储位置数据 | 学会怎么存储 IoT 数据,让你未来能可视化或分析它 | [存储位置数据](./3-transport/lessons/2-store-location-data/README.md) | +| 13 | [交通](./3-transport) | 可视化位置数据 | 学会在地图上可视化位置数据以及地图怎么用 2D 来代表 3D 的世界 | [可视化位置数据](./3-transport/lessons/3-visualize-location-data/README.md) | +| 14 | [交通](./3-transport) | 地理围栏 | 学会地理围栏是什么以及怎么用它们来通知当供应链的车辆快到目的地时 | [地理围栏](./3-transport/lessons/4-geofences/README.md) | +| 15 | [制造业](./4-manufacturing) | 训练水果质量检测器 | 学会怎么在云端上训练一个图片分类器来检测水果质量 | [训练水果质量检测器](./4-manufacturing/lessons/1-train-fruit-detector/README.md) | +| 16 | [制造业](./4-manufacturing) | 从 IoT 设备检查水果质量 | 学会怎么从一个 IoT 设备使用你的水果质量检测器 | [从 IoT 设备检查水果质量](./4-manufacturing/lessons/2-check-fruit-from-device/README.md) | +| 17 | [制造业](./4-manufacturing) | 在边缘上运行你的水果质量检测器 | 学会怎么在边缘上的 IoT 设备运行你的水果质量检测器 | [在边缘上运行你的水果质量检测器](./4-manufacturing/lessons/3-run-fruit-detector-edge/README.md) | +| 18 | [制造业](./4-manufacturing) | 从传感器触发水果质量检测 | 学会怎么从传感器触发水果质量检测 | [从传感器触发水果质量检测](./4-manufacturing/lessons/4-trigger-fruit-detector/README.md) | +| 19 | [零售](./5-retail) | 训练存货检测器 | 学会用对象检测来训练存货检测器让你在店里数存货 | [训练存货检测器](./5-retail/lessons/1-train-stock-detector/README.md) | +| 20 | [零售](./5-retail) | 从 IoT 设备检查存货 | 学会怎么用一个对象检测模型从 IoT 设备检查存货 | [从 IoT 设备检查存货](./5-retail/lessons/2-check-stock-device/README.md) | +| 21 | [消费者](./6-consumer) | 用 IoT 设备识别语音 | 学会怎么用 IoT 设备识别语音来创建一个智能计时器 | [用 IoT 设备识别语音](./6-consumer/lessons/1-speech-recognition/README.md) | +| 22 | [消费者](./6-consumer) | 理解语言 | 学会怎么理解向 IoT 设备说的语言 | [理解语言](./6-consumer/lessons/2-language-understanding/README.md) | +| 23 | [消费者](./6-consumer) | 设置计时器和提供口头反馈 | 学会怎么设置计时器和提供口头反馈当计时器被设置和当它完成的时候 | [设置计时器和提供口头反馈](./6-consumer/lessons/3-spoken-feedback/README.md) | +| 24 | [消费者](./6-consumer) | 支持多种语言 | 学会怎么支持多种语言,包括向智能计时器说的还有计时器回应的 | [支持多种语言](./6-consumer/lessons/4-multiple-language-support/README.md) | + +## 离线访问 + +你可以用 [Docsify](https://docsify.js.org/#/) 离线运行这个文档。分叉这个存储库,在本地电脑[安装 Docsify](https://docsify.js.org/#/quickstart),然后在这个存储库的根文件夹中输入 `docsify serve`。网站将在你的本地主机(localhost)上的端口 3000 提供服务:`localhost:3000`。 + +### PDF + +如果有必要离线访问,你可以为这些内容生成一个 PDF。确保你已[安装了 npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm),再在这个存储库的根文件夹中运行以下的命令: + +```sh +npm i +npm run convert +``` + +## 需要帮忙! + +想贡献一个翻译?请阅读我们的[翻译指导方针](TRANSLATIONS.md) 以及在[其中一个翻译 issue](https://github.com/microsoft/IoT-For-Beginners/issues?q=is%3Aissue+is%3Aopen+label%3Atranslation) 添加输入。如果你想帮我们翻译成一个新语言,请举一个新 issue 用于跟踪。 + +## 其它课程 + +我们的组生成了其它课程!查一下: + +- [网站开发(Web Dev for Beginners)](https://aka.ms/webdev-beginners) +- [机器学习(ML for Beginners)](https://aka.ms/ml-beginners) + +## 图片属性 + +你能在[属性](./attributions.md)找到课程中所有需要的图片属性。 From d57796d6d8baab0c54690fa0ec1b71a57463a40a Mon Sep 17 00:00:00 2001 From: Jim Bennett Date: Wed, 14 Jul 2021 15:01:25 -0700 Subject: [PATCH 5/6] Adding intro video (#210) * Update README.md * Spelling fixes * Update hardware.md * Adding IoT for beginners episode * Adding intro video --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c2458e07..ca2bb5d3 100644 --- a/README.md +++ b/README.md @@ -22,16 +22,22 @@ The projects cover the journey of food from farm to table. This includes farming **Thanks as well to our team of [Microsoft Learn Student Ambassadors](https://studentambassadors.microsoft.com?WT.mc_id=academic-17441-jabenn) who have been reviewing and translating this curriculum - [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), and [Zina Kamel](https://www.linkedin.com/in/zina-kamel/).** +Meet the team! + +[![Promo video](./images/iot-for-beginners.png)](https://youtu.be/-wippUJRi5k) + +> 🎥 Click the image above for a video about the project! + > **Teachers**, we have [included some suggestions](for-teachers.md) on how to use this curriculum. If you would like to create your own lessons, we have also included a [lesson template](lesson-template/README.md). > **Students**, to use this curriculum on your own, fork the entire repo and complete the exercises on your own, starting with a pre-lecture quiz, then reading the lecture and completing the rest of the activities. Try to create the projects by comprehending the lessons rather than copying the solution code; however that code is available in the /solutions folders in each project-oriented lesson. Another idea would be to form a study group with friends and go through the content together. For further study, we recommend [Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn). +For a video overview of this course, check out this video: -[![Promo video](./images/iot-for-beginners.png)](https://youtube.com/watch?v=bccEMm8gRuc "Promo video") +[![Promo video](https://img.youtube.com/vi/bccEMm8gRuc/0.jpg)](https://youtube.com/watch?v=bccEMm8gRuc "Promo video") > 🎥 Click the image above for a video about the project! - ## Pedagogy We have chosen two pedagogical tenets while building this curriculum: ensuring that it is project-based and that it includes frequent quizzes. By the end of this series, students will have built a plant monitoring and watering system, a vehicle tracker, a smart factory setup to track and check food, and a voice-controlled cooking timer, and will have learned the basics of the Internet of Things including how to write device code, connect to the cloud, analyze telemetry and run AI on the edge. From 3a5d3b870c54ee9b09d7935d3f1395d392e553d2 Mon Sep 17 00:00:00 2001 From: Mireille T <69097387+Mireille-T@users.noreply.github.com> Date: Fri, 16 Jul 2021 01:41:20 +0800 Subject: [PATCH 6/6] Rename zh files to zh-cn for Simplified Chinese (#213) * Rename wio-terminal.zh.md to wio-terminal.zh-cn.md * Rename assignment.zh.md to assignment.zh-cn.md * Rename README.zh.md to README.zh-cn.md * Rename virtual-device.zh.md to virtual-device.zh-cn.md * Rename README.zh.md to README.zh-cn.md --- .../translations/{README.zh.md => README.zh-cn.md} | 0 .../translations/{assignment.zh.md => assignment.zh-cn.md} | 0 .../{virtual-device.zh.md => virtual-device.zh-cn.md} | 0 .../translations/{wio-terminal.zh.md => wio-terminal.zh-cn.md} | 0 translations/{README.zh.md => README.zh-cn.md} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename 1-getting-started/lessons/1-introduction-to-iot/translations/{README.zh.md => README.zh-cn.md} (100%) rename 1-getting-started/lessons/1-introduction-to-iot/translations/{assignment.zh.md => assignment.zh-cn.md} (100%) rename 1-getting-started/lessons/1-introduction-to-iot/translations/{virtual-device.zh.md => virtual-device.zh-cn.md} (100%) rename 1-getting-started/lessons/1-introduction-to-iot/translations/{wio-terminal.zh.md => wio-terminal.zh-cn.md} (100%) rename translations/{README.zh.md => README.zh-cn.md} (100%) diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/README.zh.md b/1-getting-started/lessons/1-introduction-to-iot/translations/README.zh-cn.md similarity index 100% rename from 1-getting-started/lessons/1-introduction-to-iot/translations/README.zh.md rename to 1-getting-started/lessons/1-introduction-to-iot/translations/README.zh-cn.md diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/assignment.zh.md b/1-getting-started/lessons/1-introduction-to-iot/translations/assignment.zh-cn.md similarity index 100% rename from 1-getting-started/lessons/1-introduction-to-iot/translations/assignment.zh.md rename to 1-getting-started/lessons/1-introduction-to-iot/translations/assignment.zh-cn.md diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh.md b/1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md similarity index 100% rename from 1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh.md rename to 1-getting-started/lessons/1-introduction-to-iot/translations/virtual-device.zh-cn.md diff --git a/1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh.md b/1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh-cn.md similarity index 100% rename from 1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh.md rename to 1-getting-started/lessons/1-introduction-to-iot/translations/wio-terminal.zh-cn.md diff --git a/translations/README.zh.md b/translations/README.zh-cn.md similarity index 100% rename from translations/README.zh.md rename to translations/README.zh-cn.md