Merge branch 'microsoft:main' into main

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

@ -0,0 +1,16 @@
# IoTことはじめ
本カリキュラムのこのセクションでは、モノのインターネット (Internet of Things) の概要と基本的なコンセプトを学びます。また、クラウドに接続する初めての 'Hello World' IoT プロジェクトに取り組みます。このプロジェクトでは、センサーによって計測された光量が下がると点灯する常夜灯を作ります。
![光量に応じて点いたり消えたりする、WIOに繋げられたLED](../../images/wio-running-assignment-1-1.gif)
## トピック
1. [IoT入門](../lessons/1-introduction-to-iot/README.md)
1. [IoTをより深く知る](../lessons/2-deeper-dive/README.md)
2. [センサーとアクチュエーターを使って物理的世界と連動する](../lessons/3-sensors-and-actuators/README.md)
3. [デバイスをインターネットに接続する](../lessons/4-connect-internet/README.md)
## クレジット
全てのレッスンは [Jim Bennett](https://GitHub.com/JimBobBennett) によって ♥️ をもって書かれました

@ -0,0 +1,210 @@
# 虚拟单板机
除了买一个 IoT 设备、感应器和执行器,你也可以用你的电脑来模拟 IoT 硬件。[CounterFit 项目](https://github.com/CounterFit-IoT/CounterFit) 让你在自己的电脑上运行模拟 IoT 硬件(如感应器和执行器)的应用,以及用本地 Python 代码(就像你能在物质 Raspberry Pi 上写的代码)访问感应器和执行器。
## 设置
利用 CounterFit 前,你必须在你的电脑上安装一些免费的软件。
### 任务
安装需要的软件。
1. 安装 Python。 在 [Python 的下载页](https://www.python.org/downloads/) 找安装最新 Python 版本的指示。
1. 安装 Visual Studio Code (VS Code)。 这是你将用来写虚拟设备的 Python代码的代码编辑器。在 [VS Code 文档](https://code.visualstudio.com?WT.mc_id=academic-17441-jabenn) 找安装VS Code 的指示。
> 💁 如果你对其它平台比较熟悉,你当然可以用你较喜欢的 Python IDE 或 代码编辑器,但注意这个课程的指示将根据 VS Code。
1. 安装 VS Code 的 Pylance 扩展。 这个 VS Code 扩展提供 Python 语言支持。在 [Pylance 扩展文档](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance&WT.mc_id=academic-17441-jabenn) 找安装扩展的指示。
我们将在合适的时间在作业指示中提供安装及设置 CounterFit 的程序,因为我们需要在每个项目中安装它。
## Hello world你好世界
第一次用新的编程语言或科技通常以创建一个“Hello World”应用开始——一个输出像`"Hello World"`的字的小小应用,为了确保所有的工具被设置好。
这个虚拟 IoT 硬件的“Hello World”应用将确保你有安装好 Python 与 Visual Studio Code。它也将把虚拟 IoT 感应器和执行器连接到 CounterFit。它不会用到任何硬件他只会以连接来证明每个部分运作良好。
这个应用正在被称为`夜灯`的文件夹中,而且我们等一下会跟着不同的代码再次利用它,为了在作业当中创建夜灯应用。
### 配置 Python 虚拟环境
Python 的其中一个强大功能是安装 [pip 软件包](https://pypi.org)的能力;它们是别人写并在网上上载的代码软件包。只要用着一个命令,你就可以在你的电脑上安装一个 pip 软件包,并在你的代码中使用它。你将用 pip 安装一个软件包,把它用来跟 CounterFit 沟通。
默认情况下,当你安装一个软件包,你的电脑哪里都可以访问它,而那可以造成关于软件包版本的问题,例如:当你为新应用安装软件包的新版本,依靠旧版本的另一个应用就有可能出些状况。为了以免这种事发生,你可以用一个 [Python 虚拟环境](https://docs.python.org/3/library/venv.html),在一个专用文件夹中的 Python那当你安装 pip 软件包它们只会在那个文件夹中。
#### 任务:配置一个 Python 虚拟环境
配置一个 Python 虚拟环境便安装为 CounterFit 的 pip 软件包。
1. 从你的终端或命令行,在你选的地方运行以下的程序,来创建和导航到一个新目录:
```sh
mkdir nightlight
cd nightlight
```
2. 现在,运行以下的程序来在`.venv` 文件夹中创建一个虚拟环境
```sh
python3 -m venv .venv
```
> 💁 为了创建虚拟环境,你必须明确地调用 `python3`,万一 Python 3 (最新版本)以外你也曾经安装过 Python 2。如果你安装过 Python 2那调用 `python` 将用到 Python 2 而不是 Python 3。
3. 激活虚拟环境:
* 在 Windows 运行:
```cmd
.venv\Scripts\activate.bat
```
* 在 macOS 或 Linux运行
```cmd
source ./.venv/bin/activate
```
4. 虚拟环境一被激活,默认的 `python` 命令将运行用来创建虚拟环境的 Python 版本。为了拿到版本,运行以下的程序:
```sh
python --version
```
输出应该包括一下:
```output
(.venv) ➜ nightlight python --version
Python 3.9.1
```
> 💁 你的 Python 版本有可能不一样,但只要版本是 3.6 或以上就没事。不然,请删除这个文件夹,并安装较新的 Python 版本,再试一试。
5. 运行以下的命令来安装为 CounterFit 的 pip 软件包。这些软件包包括主要的 CounterFit 应用以及为 Grove 硬件的垫片。这些垫片让你就像用来自 Grove 生态系统的物质感应器和执行器一样写代码,但把它连接到虚拟 IoT 设备。
```sh
pip install CounterFit
pip install counterfit-connection
pip install counterfit-shims-grove
```
这些 pip 软件包只会在虚拟环境中安装,而你无法在虚拟环境外访问它。
### 写代码
Python 虚拟环境一被准备好,你就能为 “Hello World” 应用写代码。
#### 任务:写代码
创建一个 Python 应用在控制台上打印`"Hello World"` 输出。
1. 从你的终端或命令行,在虚拟环境中运行以下的程序来创建一个叫做`app.py` 的 Python 文件:
* 在 Windows 运行:
```cmd
type nul > app.py
```
* 在 macOS 或 Linux运行
```cmd
touch app.py
```
2. 在 VS Code 打开当前的文件夹:
```sh
code .
```
> 💁 如果你的终端在 macOS 返回`command not found`,那就代表 VS Code 还未被加进你的 PATH。为了把 VS Code 加进你的 PATH你可以按照 [Launching from the command line section of the VS Code 文档](https://code.visualstudio.com/docs/setup/mac?WT.mc_id=academic-17441-jabenn#_launching-from-the-command-line) 的指示,然后运行命令。在 Windows 和 LinuxVS Code 默认被加进你的 PATH。
3. 当 VS Code 被启动,它会激活 Python 虚拟环境。被选择的虚拟环境将在底部状态栏出现:
![ 被选择的虚拟环境将在 VS Code的底部状态栏出现](../../../images/vscode-virtual-env.png)
4. 如果VS Code 被启动时VS Code 终端已经正在运行,虚拟环境不会被激活。这时,最容易做的是用 **Kill the active terminal instance** 的按钮:
![VS Code Kill the active terminal instance 按钮](../../../images/vscode-kill-terminal.png)
虚拟环境的名字将是终端提示的字首,所以你可以把它用来确认虚拟环境已经被激活。例如,它可能是:
```sh
(.venv) ➜ nightlight
```
如果你没有 `.venv` 的字首在提示上,虚拟环境不在终端中活动。
5. 为了启动一个新的 VS Code 终端,选择*Terminal -> New Terminal 或按`` CTRL+` ``。这个新终端将加载虚拟环境,以及激活它的调用将在终端中出现。提示也会有虚拟环境的名字(`.venv`
```output
➜ nightlight source .venv/bin/activate
(.venv) ➜ nightlight
```
6. 从 VS Code explorer 打开 `app.py` 文件,在加以下的代码:
```python
print('Hello World!')
```
`print` 函数将在控制台打印出函数中的任何东西。
7. 从 VS Code 终端,运行以下的程序来运行你的 Python 应用:
```sh
python app.py
```
以下将在输出中:
```output
(.venv) ➜ nightlight python app.py
Hello World!
```
😀 你的 “Hello World” 编码成功了!
### 连接“硬件”
你的第二 “Hello World” 步将是运行 CounterFit 应用,再连接你的代码。这是把一些 IoT 硬件插入开发者套件的虚拟相等。
#### 任务:连接“硬件”
1. 从 VS Code 终端,用以下的命令启动 CounterFit 应用:
```sh
CounterFit
```
应用将开始运行以及在你的网页浏览器打开:
![CounterFit 应用在网页浏览器运行](../../../images/counterfit-first-run.png)
他会有个 *Disconnected*(断开连接)的标记,右上角的 LED 也会关着。
2. 在 `app.py` 上加以下的代码:
```python
from counterfit_connection import CounterFitConnection
CounterFitConnection.init('127.0.0.1', 5000)
```
这个代码从 `counterfit_connection` 模块进口`CounterFitConnection` 类;这个模块来自你刚才安装的 `counterfit-connection` pip 软件包。然后,它初始化跟 CounterFit 应用的连接。应用在`127.0.0.1` 运行着它是一个IP 地址,而你一直可以用它在端口 5000 访问你的本地电脑(通常被叫为*localhost*)。
> 💁 如果你有其它应用正在端口 5000 运行着,你可以在代码更新端口,再用 `CounterFit --port <port_number>` 运行 CounterFit在`<port_number>` 填着你想用的端口。
3. 你必须选择 **Create a new integrated terminal** 按钮来启动一个新 VS Code 终端。这是因为 CounterFit 应用正在当前终端运行着。
![VS Code Create a new integrated terminal 按钮](../../../images/vscode-new-terminal.png)
4. 在这个新终端,像以前一样运行`app.py` 文件。CounterFit 的状态将改成 **Connected** 连接LED也会开着。
![CounterFit 被连接了](../../../images/counterfit-connected.png)
> 💁 你可以在 [code/virtual-device](code/virtual-device) 文件夹找到这个代码。
😀 你的硬件连接成功了!

@ -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>
<label for="locale">locale</label>
<select v-model="locale">
<option>ar</option>
<option>bn</option>
<option>en</option>
<option>ko</option>
<option>id</option>
<option>hi</option>
<option>it</option>
</select>
</nav>
<div id="app">

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

@ -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],
};

@ -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) ব্যবহার করা যাবে।
<!--
[![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) |
| 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 সাবমিট করতে হবে।
## অন্য পাঠ্যক্রম সমূহ

@ -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)找到课程中所有需要的图片属性。
Loading…
Cancel
Save