跳到教程内容
教程首页
App Inventor 2 教程 物联网入门
准备开始
动手创造 · PROJECT LAB

物联网入门

准备探索你的新作品
0%
★★★ 项目难度每一步,都离作品更近

先了解你将做出什么

应用介绍

这组教程演示 App Inventor 如何通过 BluetoothLE 与 Arduino 101 通信。完成后,你可以读取加速度、湿度、光线、土壤湿度、距离和温度,也可以控制 RGB LCD、录音器和 LED。

每个实验都拆成介绍、接线、扩展、设计器、属性、程序块和测试等多个子步骤,方便按“下一步”逐页学习。

硬件提示:本教程使用 Arduino 101、Seeed Grove Shield 和 Grove 传感器方案。Arduino 101 与配套扩展属于较老的实验平台;如果你使用其他开发板或传感器,不能直接照搬引脚和扩展名。

教程主图

开始前的准备

硬件与软件

  • Arduino 101 开发板,以及可选的 Seeed Grove Shield。
  • 对应的 Grove 传感器或执行器;每个实验会写明型号和引脚。
  • Arduino IDE、App Inventor 和 Android 手机上的 AI2 Companion。
  • 本教程的起始工程:物联网入门.aia
  • 蓝牙基础工程:物联网基础连接.aia

扩展包

下载 Arduino 101 扩展包。在 App Inventor 设计器的“扩展”面板中选择“导入扩展”,再选择下载的 .aix 文件。

Arduino 固件

配套固件使用 AIM-For-Thing-Arduino101.ino。每次实验都只把当前功能设为 ENABLED,其他功能设为 DISABLED,再把程序上传到 Arduino 101。

连接你的应用

通过 WiFi 连接设备

使用 AI 伴侣连接后,可以在手机或平板上实时查看和测试应用。

AI 伴侣连接示意图

视频演示:

App Inventor 2 连接 AI 伴侣

安装 AI 伴侣

使用手机系统扫码器或浏览器扫描二维码,下载并安装 AI 伴侣。只需安装一次,以后可以直接使用。

AI 伴侣下载二维码

打开应用的连接二维码

在 App Inventor 2 中依次点击「连接」和「AI 伴侣」。

打开 AI 伴侣连接

连接手机

连接二维码会显示在电脑屏幕上。

应用连接二维码

在手机 AI 伴侣中点击蓝色的「scan QR code」按钮扫描二维码;也可以输入代码,再点击橙色的「connect with code」按钮。

AI 伴侣连接界面

使用模拟器连接

模拟器由 aiStarter 自动启动,不需要手机,但速度较慢、环境配置较复杂且 Android 版本较旧,一般不推荐作为首选方式。

App Inventor 2 连接模拟器

使用 USB 连接

aiStarter 可以通过 USB 调试连接手机,并自动启动手机上的 AI 伴侣。它的使用效果和扫描二维码连接基本相同。

App Inventor 2 使用 USB 连接

查看完整连接教程

下面的视频完整演示 AI 伴侣、模拟器和 USB 三种连接方式。不同方式的详细比较可以查看连接方式说明

App Inventor 2 完整连接教程

仍然无法连接?

可以前往中文社区查找解决方案或发帖提问。

物联网基础连接

1. 下载基础工程

如果你已经有蓝牙基础工程,可以直接使用 物联网基础连接.aia,跳到“扫描设备”。否则按下面步骤创建连接界面。

2. 设计连接界面

Screen1 中加入一个水平布局和四个按钮,将按钮重命名为 ButtonScanButtonStopScanButtonConnectButtonDisconnect,文字分别设为“扫描”“停止扫描”“连接”“断开连接”。

在按钮下方加入 LabelStatus,初始文字为 Status: ;再加入 ListView,重命名为 ListBLE

蓝牙连接界面

3. 导入 BluetoothLE 扩展

下载 BluetoothLE 扩展,从“扩展”面板导入,然后把 BluetoothLE 拖到预览区中。它是非可视组件,会出现在屏幕下方。

导入蓝牙扩展

4. 开始扫描

当 ButtonScan.被点击时 中加入:

call BluetoothLE1.StartScanning
set LabelStatus.Text to "Status: Scanning"
set ListBLE.Visible to true

开始扫描

5. 停止扫描并显示设备

当 ButtonStopScan.被点击时 中调用 BluetoothLE1.StopScanning,并把状态设为 Status: Stopped Scanning

当 BluetoothLE1.DeviceFound 中,将 ListBLE.元素字串 设置为 BluetoothLE1.Devicelist

停止扫描

6. 连接和断开设备

当 ButtonConnect.被点击时 中调用 BluetoothLE1.连接,参数使用 ListBLE.选中项索引;连接成功后把 LabelStatus.文本 设为 Status: Connected,并隐藏 ListBLE

当 ButtonDisconnect.被点击时 中调用 BluetoothLE1.断开连接;在 当 BluetoothLE1.Disconnected 中把状态设为 Status: Disconnected

连接设备

7. 测试蓝牙基础连接

用 AI2 Companion 测试:点击“扫描”,选择 Arduino 设备,点击“停止扫描”,再点击“连接”。成功后状态应显示“已连接”。

连接测试

设置 Arduino 101

1. 安装 Arduino IDE

安装 Arduino IDE,打开 AIM-For-Thing-Arduino101.ino。如果 IDE 自动创建了其他日期命名的草稿,可以关闭它,保留 Arduino 101 工程。

打开 Arduino 工程

2. 安装传感器库

在 Arduino IDE 中选择“工具”或“Sketch”→“管理库”,搜索并安装 DHT-sensor-libraryAdafruit Unified Sensor

搜索传感器库

3. 安装 RGB LCD 库

如果要做 RGB LCD 实验,下载 Arduino 101 工程包,在 Arduino IDE 中选择“Sketch”→“导入库”→“添加 ZIP 库”。再回到库管理器,确认 Grove_LCD_RGB_Backlight-master 显示为已安装。

安装 LCD 库

4. 选择 Arduino 101 开发板

连接 Arduino,在“工具”→“开发板”中选择 Arduino/Genuino 101。如果列表中没有,打开开发板管理器,搜索 101,安装 Intel Curie Board 的 1.0.7 版本。注意不要使用更高版本固件。

选择开发板

5. 选择端口

在“工具”→“端口”中选择 Arduino 对应端口:macOS 通常以 /dev/cu.usbmodem 开头,Windows 通常显示为 COMX (Arduino/Genuino 101)。插入开发板后端口可能需要等待一会儿才出现。

选择端口

6. 上传程序

点击 Arduino IDE 左上角的上传按钮,把程序发送到开发板。之后 App Inventor 就可以通过 BluetoothLE 与 Arduino 交互。

上传程序

加速度计

1. 了解加速度计

加速度计测量物体速度的变化率。本实验使用 Arduino 101 内置加速度计,并在手机标签中显示 X、Y、Z 三个方向的读数。先完成“物联网基础连接”和“设置 Arduino 101”。

2. 配置 Arduino 固件

打开 AIM-For-Thing-Arduino101.ino,只启用 ACCELEROMETER,其他功能设为 DISABLED,连接开发板并上传。

上传加速度计固件

3. 导入加速度计扩展

导入 Arduino 101 Extension Bundle。在设计器中加入 Arduino101Accelerometer 扩展。

加入加速度计扩展

4. 添加数据标签

LabelStatusListBLE 之间加入 LabelData,文字设为 Data:

添加数据标签

5. 选择蓝牙设备

选中 Arduino101Accelerometer1,把 BluetoothDevice 属性设为 BluetoothLE1

6. 请求加速度数据

当 BluetoothLE1.Connected 中加入:

call Arduino101Accelerometer1.RequestAccelerometerDataUpdates

7. 保存三个方向的读数

建立全局变量 Accel_XAccel_YAccel_Z,初始值都为 0

保存加速度变量

8. 显示加速度数据

新建过程 updateDataLabel,将 LabelData.文本 设置为:

Reading: X [Accel_X] Y [Accel_Y] Z [Accel_Z]

显示加速度

9. 接收数据事件

加入 当 Arduino101Accelerometer1.AccelerometerDataReceived,把三个参数分别存入全局变量,然后调用 updateDataLabel

加速度数据事件

10. 测试加速度计

用 AI2 Companion 连接手机,移动 Arduino 101。标签中的 X、Y、Z 数值应随姿态变化。

测试加速度计

按钮

1. 了解按钮实验

本实验使用 Grove Button 和 Arduino 101。Grove Shield 可以简化接线,但不是强制要求。开始前完成 Arduino 设置。

2. 接线和上传固件

把按钮接到 Grove Shield 的数字引脚 D4。固件只启用 BUTTON,连接开发板并上传。

按钮接线

按钮固件

3. 添加按钮扩展

导入 Arduino 101 Extension Bundle,在设计器中加入 Arduino101ButtonLabelData

4. 设置按钮属性

选中 Arduino101Button1,将 BluetoothDevice 设为 BluetoothLE1Pin4。Pin 只填数字,不填字母 D

5. 请求按钮状态

当 BluetoothLE1.Connected 中加入:

call Arduino101Button1.RequestButtonStateUpdates

请求按钮状态

6. 记录按下次数

建立全局变量 buttonPresses = 0,过程 updateDataLabel 显示 Button presses: [buttonPresses]

按钮计数变量

7. 编写按下事件

当 Arduino101Button1.被压紧时 中,把 Screen1.背景颜色 设为青色,将 buttonPresses 加 1,然后调用 updateDataLabel

按钮按下事件

8. 编写松开事件

当 Arduino101Button1.被松开时 中,把 Screen1.背景颜色 恢复为白色。

按钮松开事件

9. 测试按钮

按下并松开按钮。计数应增加,按下时屏幕变青色,松开后恢复白色。

测试按钮

湿度传感器

1. 了解传感器

使用 Grove Temperature & Humidity Sensor。它同时提供湿度和温度,本章先读取湿度。

2. 接线和固件

把传感器接到数字引脚 D4。固件启用 TEMPERATURE,连接 Arduino 并上传。

湿度传感器接线

3. 添加扩展和标签

导入 Arduino 101 Extension Bundle,加入 LabelDataArduino101Humidity 扩展。

4. 设置传感器属性

选中 Arduino101Humidity1,将 BluetoothDevice 设为 BluetoothLE1Pin4

5. 请求湿度数据

在连接成功事件中加入 Arduino101Humidity1.RequestHumidityUpdates

请求湿度数据

6. 保存并显示湿度

建立全局变量 Humidity = 0,过程 updateDataLabel 将标签设置为 Humidity: [Humidity]

湿度显示

7. 接收湿度事件

HumidityReceived 事件中把 reading 存入 Humidity,再调用 updateDataLabel

湿度事件

8. 测试湿度传感器

用手在传感器周围形成一个小空间,等待标签数值变化。

测试湿度

光线传感器

1. 接线和固件

使用 Grove Light Sensor。属性示例为模拟引脚 A1Pin 属性只填数字 1。固件启用 LIGHT_SENSOR

光线传感器接线

2. 添加扩展和数据标签

加入 LabelDataArduino101LightSensor 扩展,将 BluetoothDevice 设为 BluetoothLE1

3. 设置引脚

选中扩展,把 Pin 设置为 1。如果实物接线与示例不同,应以实际模拟引脚为准。

4. 请求光线数据

在连接事件中调用 Arduino101LightSensor1.RequestLightUpdates,建立全局变量 light = 0

请求光线数据

5. 显示光线数据

过程 updateDataLabel 显示 Light: [light]

显示光线数据

6. 接收光线事件

LightSensorDataReceived 事件中保存 reading,再调用 updateDataLabel

光线数据事件

7. 测试光线传感器

用手遮住传感器,或用灯光照射它,观察标签数值变化。

测试光线传感器

土壤湿度传感器

1. 接线和固件

使用 Grove Moisture Sensor,接到模拟引脚 A2,所以 Pin2。固件启用 MOISTURE_SENSOR

土壤湿度传感器

2. 添加扩展

加入 LabelDataArduino101Moisture 扩展,将 BluetoothDevice 设为 BluetoothLE1

3. 请求湿度数据

在连接事件中调用 Arduino101Moisture1.RequestMoistureUpdates,建立全局变量 moisture = 0

请求土壤湿度

4. 显示土壤湿度

过程 updateDataLabel 将标签设置为 Moisture: [moisture]

显示土壤湿度

5. 接收湿度事件

MoistureDataReceived 事件中保存 reading,再调用 updateDataLabel

土壤湿度事件

6. 测试土壤湿度

让探头接触少量水分,观察数值变化。不要让水接触电线、接口或开发板。

测试土壤湿度

距离(红外接近)传感器

1. 接线和固件

使用 Grove Infrared Proximity Sensor。常规示例使用模拟引脚 A0Pin0;如果实物黄色信号线接在 A1,就填 1。固件启用 PROXIMITY

接近传感器

2. 添加扩展和标签

加入 LabelDataArduino101ProximitySensor 扩展,将 BluetoothDevice 设为 BluetoothLE1

3. 设置引脚

检查 Grove 接线图和实物信号线,确认 A0/A1 后填写 Pin。不要只按颜色猜测引脚。

接近传感器引脚

4. 请求距离数据

在连接事件中调用 Arduino101ProximitySensor1.RequestProximityUpdates,建立全局变量 Proximity = 0

请求距离数据

5. 显示距离数据

过程 updateDataLabel 显示 Distance: [Proximity]

显示距离数据

6. 接收距离事件

ProximitySensorDataReceived 事件中保存数据,再调用 updateDataLabel

距离数据事件

7. 测试距离传感器

把手靠近或移开传感器。如果数值不变,重新检查实际信号线对应的是 A0 还是 A1

RGB LCD

1. 接线和固件

使用 Grove LCD RGB Backlight,将它插入 Grove Shield 的任意 I2C 接口;LCD 不需要设置 Pin。固件启用 RGBLCD

RGB LCD 接线

2. 添加界面组件

ListBLE 下方加入 ListPickerTextBoxButton

  • ListPickerBackgroundColor:文字为“背景颜色”。
  • TextMessage:提示文字为“输入要发送的消息”。
  • ButtonMessageSend:文字为“发送消息”,宽度充满父容器。

再加入 Arduino101RgbLcd 扩展。

3. 设置 LCD 属性

选中 Arduino101RgbLcd1,把 BluetoothDevice 设为 BluetoothLE1。它不需要 Pin,只要插入 I2C 接口即可。

4. 设置初始文字和颜色

连接成功时调用 setText("Connected!"),调用 SetBackgroundColor 设置绿色,并把 ListPickerBackgroundColor.元素字串 设置为:

red, orange, yellow, green, blue, purple, grey, white

RGB LCD 连接

5. 发送文字

当 ButtonMessageSend.被点击时 中调用 Arduino101RgbLcd1.setText(TextMessage.文本),发送后把 TextMessage.文本 设为空文本。

发送 LCD 文字

6. 切换背光颜色

当 ListPickerBackgroundColor.选择完成时 中,用 Selectionif / else if 判断,对八种颜色分别调用 SetBackgroundColor

切换 LCD 颜色

7. 测试 RGB LCD

发送文字,再选择不同背景颜色。LCD 应显示文字并改变背光颜色。

温度传感器

1. 接线和固件

使用 Grove Temperature & Humidity Sensor,接数字引脚 D4。固件启用 TEMPERATURE,连接 Arduino 并上传。

温度传感器

2. 添加扩展和标签

加入 LabelDataArduino101Humidity 扩展,将 BluetoothDevice 设为 BluetoothLE1Pin4

3. 请求温度数据

在连接事件中调用 Arduino101Humidity1.RequestTemperatureUpdates,建立全局变量 Temperature = 0

请求温度数据

4. 显示温度数据

过程 updateDataLabel 显示 Temperature: [Temperature]

显示温度数据

5. 接收温度事件

TemperatureReceived 事件中把参数保存到 Temperature,再调用 updateDataLabel

温度事件

6. 测试温度传感器

用手捂住传感器,或把它靠近台灯,观察温度变化。温度变化通常比光线或按钮慢。

录音器

1. 接线和固件

使用 Grove Recorder,固件启用 SOUND_RECORDER。本教程示例使用 D4

录音器固件

2. 添加录音控制界面

LabelData 下方加入水平布局和三个按钮:ButtonStartRecording(开始录音)、ButtonStopRecording(停止录音)、ButtonPlay(播放)。

3. 添加录音扩展

加入 Arduino101SoundRecorder 扩展,将 BluetoothDevice 设为 BluetoothLE1

4. 设置播放和录音引脚

PlayPin 设为 4RecordPin 设为比它大 1 的 5。不需要再接一根物理线,Grove 板会处理这两个通道。

5. 开始录音

当 ButtonStartRecording.被点击时 中调用 StartRecording,再把 LabelData.文本 设为 Data: Recording

开始录音

6. 停止录音

当 ButtonStopRecording.被点击时 中调用 StopRecording,再把 LabelData.文本 设为 Data: Recorded

停止录音

7. 播放录音

当 ButtonPlay.被点击时 中调用 PlayRecordedSound

播放录音

8. 测试录音器

点击“开始录音”,说话或录制环境声音;点击“停止录音”,再点击“播放”检查回放。

LED

1. 接线和固件

使用 Grove White LED,接到数字引脚 D5。固件启用 LED,连接 Arduino 并上传。

2. 添加开关界面

LabelStatus 下方加入水平布局和两个按钮:ButtonOn(打开)和 ButtonOff(关闭)。再加入 SliderIntensity,宽度充满父容器,MinValue = 0MaxValue = 100

LED 界面

3. 添加 LED 扩展和标签

加入 LabelData,初始文字为 Data: ,再加入 Arduino101LED 扩展。

4. 设置 LED 属性

BluetoothDevice 设为 BluetoothLE1Pin5Intensity 设为 100

5. 编写开关事件

  • ButtonOn.被点击时:调用 Arduino101LED1.TurnOn
  • ButtonOff.被点击时:调用 Arduino101LED1.TurnOff

LED 开关

6. 保存亮度值

建立全局变量 Intensity = 0,过程 updateDataLabel 显示 Intensity: [Intensity]

LED 亮度变量

7. 用滑块调节亮度

当 SliderIntensity.位置改变时 中,将 Arduino101LED1.Intensity 和全局变量 Intensity 都设为 thumbPosition,然后调用 updateDataLabel

LED 亮度控制

8. 测试 LED

点击打开、关闭按钮,并拖动亮度滑块。LED 应响应开关和亮度变化。

常见问题

扫描不到 Arduino

确认固件已经上传,Arduino 供电正常,手机蓝牙已打开;连接时不要同时运行多个 BLE 实验 App。

连接成功但没有数据

检查连接事件中是否调用了对应的 Request...Updates,并确认扩展的 BluetoothDevice 选择的是 BluetoothLE1

模拟传感器读数不变

检查 Pin 是否填了正确的数字,尤其是接近传感器的 A0/A1 和光线、土壤湿度传感器的 A1/A2

扩展无法导入

确认使用与 Arduino 101 匹配的扩展包;其他开发板不能直接使用这些 Arduino101... 组件。