Merge branch 'main' into patch-2

pull/202/head
Jim Bennett 4 years ago committed by GitHub
commit cb2ff3913d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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 <Arduino.h>
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 <Arduino.h>
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” 编码成功了!

@ -1,9 +0,0 @@
# Dummy File
This file acts as a placeholder for the `translations` folder. <br>
**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!

@ -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 <SubscriptionId>
```
`<SubscriptionId>` এর জায়গায় আমরা যে সাবস্ক্রিপশন ব্যবহার করতে চাই, সেটির আইডি দিতে হবে। এই কমান্ডটি চালানোর পরে, আমাদের অ্যাকাউন্টগুলি তালিকাভুক্ত করতে কমান্ডটি আবার চালাতে হবে। তখন `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 <location>
```
এখানে `<location>` এর পবিবর্তে পূর্ববর্তী ধাপে নির্দিষ্টকৃত লোকেশন দিতে হবে।
### কাজ - IoT Hub তৈরী
আমরা এখন আমাদের রিসোর্স গ্রুপে একটি আইওটি হাব রিসোর্স তৈরি করতে পারি।
1. নিচের কমান্ড ব্যবহার করে আইওটি হাব রিসোর্স তৈরি করি।
```sh
az iot hub create --resource-group soil-moisture-sensor \
--sku F1 \
--partition-count 2 \
--name <hub_name>
```
এখানে`<hub_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 <hub_name>
```
এখানে `<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 <hub_name>
```
এখানে `<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 <hub_name>
```
এখানে `<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 <hub_name>
```
`<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 <hub_name>
```
`<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)

@ -0,0 +1,19 @@
# ক্লাউড সার্ভিসের ব্যাপারে জানা
## নির্দেশাবলী
ক্লাউড সার্ভিসগুলো, যেমন মাইক্রোসফট এর Azure, শুধুমাত্র একটা কম্পিউটার আমাদের ব্যবহার করতে দিলো - ব্যাপারটি আসলে এমন নয়। এখানে যেসকল সার্ভিস থাকে, সেগুলো হলোঃ
* Infrastructure as a service (IaaS)
* Platform as a service (PaaS)
* সার্ভারবিহীন পরিষেবা
* Software as a service (SaaS)
এই বিভিন্ন ধরণের অফার সম্পর্কে জানতে হবে এবং সেগুলি কী এবং কীভাবে তারা পৃথক তা ব্যাখ্যা করতে হবে। আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক তা জানতে হবে।
## এসাইনমেন্ট মূল্যায়ন মানদন্ড
| ক্রাইটেরিয়া | দৃষ্টান্তমূলক (সর্বোত্তম) | পর্যাপ্ত (মাঝারি) | উন্নতি প্রয়োজন (নিম্নমান) |
| -------- | --------- | -------- | ----------------- |
| ক্লাউডের বিভিন্ন ধরণের অফার ব্যখ্যা করা | ধরণের অফার বিষদভাবে ব্যখ্যা করেছে | কেবল ৩ ধরণের অফার ব্যখ্যা করেছে | কেবল দুয়েক ধরণের অফার ব্যখ্যা করেছে |
| কোন অফারটি আইওটি এর জন্য ভালো তা ব্যখ্যা করা |আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক এবং এর কারণ ব্যাখ্যা করেছে | আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক কিন্তু এর কারণ ব্যাখ্যা করতে পারেনি | আইওটি ডেভলাপারদের জন্য কোন অফারগুলি প্রাসঙ্গিক তা বর্ণনা করতে পারেনি |

@ -4,11 +4,9 @@
<router-link class="navlink" to="/">Home</router-link> <router-link class="navlink" to="/">Home</router-link>
<label for="locale">locale</label> <label for="locale">locale</label>
<select v-model="locale"> <select v-model="locale">
<option>ar</option>
<option>bn</option>
<option>en</option> <option>en</option>
<option>ko</option>
<option>id</option>
<option>hi</option>
<option>it</option>
</select> </select>
</nav> </nav>
<div id="app"> <div id="app">

@ -788,7 +788,7 @@
"questionText": "IoT Hub সিক্যুরিটি ছাড়াই যেকোন ডিভাইস কানেক্ট করতে দেয়", "questionText": "IoT Hub সিক্যুরিটি ছাড়াই যেকোন ডিভাইস কানেক্ট করতে দেয়",
"answerOptions": [ "answerOptions": [
{ {
"answerText": "মিথ্যা"", "answerText": "মিথ্যা",
"isCorrect": "true" "isCorrect": "true"
}, },
{ {

@ -1,9 +1,13 @@
// index.js // index.js
import ar from './ar.json';
import bn from './bn.json';
import en from './en.json'; import en from './en.json';
//export const defaultLocale = 'en'; //export const defaultLocale = 'en';
const messages = { const messages = {
ar: ar[0],
bn: bn[0],
en: en[0], en: en[0],
}; };

@ -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/) [![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) [![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 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&maxAge=2592000)](https://GitHub.com/microsoft/IoT-For-Beginners/network/) [![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=Star&maxAge=2592000)](https://GitHub.com/microsoft/IoT-For-Beginners/stargazers/) [![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/).** **ধন্যবাদ জানাতে চাই আমাদের সেসকল [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) ব্যবহার করা যাবে। > **শিক্ষার্থীরা**, এই কোর্সটি নিজে ব্যবহার করতে চাইলে, পুরো রেপোসিটরি 'fork' করতে হবে এবং লেকচার-পূর্ববর্তী কুইজ দিয়ে শুরু করতে হবে। তারপরে লেকচারটি পড়ে এবং বাকি কাজগুলো বুঝে, নিজেই অনুশীলনগুলি সম্পূর্ণ করতে হবে। সমাধান কোডগুলো কপি না করে, বরং লেসনগুলি বোঝার মাধ্যমে প্রজেক্টগুলি তৈরি করার চেষ্টা করতে হবে। তবে হ্যাঁ, সল্যুশন কোডগুলো প্রতিটি প্রজেক্ট-ভিত্তিক লেসনের সমাধান ফোল্ডারে পাওয়া যাবে। আরেকটি পরামর্শ হলো বন্ধুদের সাথে একটি স্টাডি গ্রুপ গঠন করা এবং একসাথে লেসনগুলোর মধ্য দিয়ে যাওয়া। আরও বেশি শেখার জন্য, [Microsoft Learn](https://docs.microsoft.com/users/jimbobbennett/collections/ke2ehd351jopwr?WT.mc_id=academic-17441-jabenn) ব্যবহার করা যাবে।
<!-- [![Promo video](../images/iot-for-beginners.png)](https://youtube.com/watch?v=bccEMm8gRuc "Promo video")
> প্রোমো ভিডিও > 🎥 উপরের ছবিতে ক্লিক করলেই এই পুরো কারিক্যুলামটি সম্পর্কে জানা যাবে।
[![Promo video](./images/iot-for-beginners.png)](https://youtube.com/watch?v=R1wrdtmBSII "Promo video")
> 💁 উপরের ছবিতে ক্লিক করলেই এই পুরো কারিক্যুলামটি সম্পর্কে এবং এটিতে যারা কাজ করেছেন তাদের সম্পর্কে জানা যাবে।
-->
## শিক্ষাপদ্ধতি ## শিক্ষাপদ্ধতি
@ -54,7 +48,7 @@
## প্রতিটি পাঠে রয়েছে: ## প্রতিটি পাঠে রয়েছে:
- (অপশনাল) স্কেচনোট - স্কেচনোট
- (অপশনাল)পরিপূরক ভিডিও - (অপশনাল)পরিপূরক ভিডিও
- লেকচার-পূর্ববর্তী কুইজ - লেকচার-পূর্ববর্তী কুইজ
- লিখিত লেসন - লিখিত লেসন
@ -77,8 +71,8 @@
| 04 | [IoT যাত্রার সূচনা](./1-getting-started) | আইওটি ডিভাইসকে ইন্টারনেটে সংযুক্ত করা | এমকিউটিটি ব্রোকারের সাথে নাইটলাইটটি সংযুক্ত করে বার্তাগুলি প্রেরণ এবং গ্রহণ করতে আইওটি ডিভাইসটিকে কীভাবে ইন্টারনেটে সংযুক্ত করতে হবে সেই সংক্রান্ত জ্ঞান অর্জন | [আইওটি ডিভাইসকে ইন্টারনেটে সংযুক্তকরণ ](./1-getting-started/lessons/4-connect-internet/translations/README.bn.md) | | 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) | | 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) | | 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) | | 07 | [ফার্ম](./2-farm) | স্বয়ংক্রিয় সেচকার্য | রিলে এবং এমকিউটিটি ব্যবহার করে কীভাবে স্বয়ংক্রিয়ভাবে এবং নির্দিষ্ট সময়ে সেচ দেয়া যায় সে সংক্রান্ত জ্ঞান অর্জন | [স্বয়ংক্রিয় সেচকার্য](./2-farm/lessons/3-automated-plant-watering/translations/README.bn.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) | | 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) | | 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) | | 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) | | 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 সাবমিট করতে হবে।
## অন্য পাঠ্যক্রম সমূহ ## অন্য পাঠ্যক্রম সমূহ

Loading…
Cancel
Save