|
|
# 故障排除指南
|
|
|
|
|
|
本指南帮助您解决在使用 IoT for Beginners 课程时遇到的常见问题。问题按类别组织,便于导航。
|
|
|
|
|
|
## 目录
|
|
|
|
|
|
- [安装问题](../..)
|
|
|
- [Python 安装](../..)
|
|
|
- [VS Code 和扩展](../..)
|
|
|
- [PlatformIO(Wio Terminal)](../..)
|
|
|
- [Grove 库](../..)
|
|
|
- [硬件问题](../..)
|
|
|
- [树莓派](../..)
|
|
|
- [Wio Terminal](../..)
|
|
|
- [虚拟设备(CounterFit)](../..)
|
|
|
- [连接问题](../..)
|
|
|
- [WiFi 连接](../..)
|
|
|
- [云服务](../..)
|
|
|
- [MQTT](../..)
|
|
|
- [传感器和执行器问题](../..)
|
|
|
- [Grove 传感器](../..)
|
|
|
- [摄像头](../..)
|
|
|
- [麦克风和扬声器](../..)
|
|
|
- [开发环境问题](../..)
|
|
|
- [VS Code](../..)
|
|
|
- [Python 虚拟环境](../..)
|
|
|
- [依赖项](../..)
|
|
|
- [性能问题](../..)
|
|
|
- [常见错误信息](../..)
|
|
|
- [寻求帮助](../..)
|
|
|
|
|
|
---
|
|
|
|
|
|
## 安装问题
|
|
|
|
|
|
### Python 安装
|
|
|
|
|
|
#### 问题:Python 版本过低
|
|
|
**错误:** `需要 Python 3.6 或更高版本`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 从 [python.org](https://www.python.org/downloads/) 下载最新的 Python 3
|
|
|
2. 在 Windows 安装时,勾选“将 Python 添加到 PATH”
|
|
|
3. 验证安装:
|
|
|
```bash
|
|
|
python3 --version
|
|
|
```
|
|
|
|
|
|
#### 问题:多个 Python 版本冲突
|
|
|
**症状:** 运行错误的 Python 版本,包安装到错误位置
|
|
|
|
|
|
**解决方案:**
|
|
|
- **Windows:** 使用 `py -3` 代替 `python` 明确调用 Python 3
|
|
|
- **macOS/Linux:** 使用 `python3` 代替 `python`
|
|
|
- 始终为项目创建并使用虚拟环境
|
|
|
|
|
|
#### 问题:找不到 pip 命令
|
|
|
**错误:** `'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 尝试使用 `pip3` 代替 `pip`
|
|
|
2. 或使用 `python -m pip` 或 `python3 -m pip`
|
|
|
3. 确保 Python 已添加到 PATH(重新安装 Python 并选中该选项)
|
|
|
|
|
|
### VS Code 和扩展
|
|
|
|
|
|
#### 问题:Pylance 扩展不起作用
|
|
|
**症状:** 无 Python IntelliSense、代码补全或类型检查
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 打开 VS Code 命令面板(`Ctrl+Shift+P` 或 `Cmd+Shift+P`)
|
|
|
2. 运行“Python: 选择解释器”
|
|
|
3. 选择正确的 Python 解释器(如果使用虚拟环境,则选择虚拟环境)
|
|
|
4. 重新加载 VS Code 窗口
|
|
|
|
|
|
#### 问题:VS Code 未检测到虚拟环境
|
|
|
**症状:** 选中错误的 Python 解释器
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 确保您已在终端激活虚拟环境
|
|
|
2. 打开命令面板,运行“Python: 选择解释器”
|
|
|
3. 选择 `.venv` 文件夹中的解释器
|
|
|
4. 检查状态栏(左下角)显示正确的 Python 版本
|
|
|
|
|
|
### PlatformIO(Wio Terminal)
|
|
|
|
|
|
#### 问题:PlatformIO 安装失败
|
|
|
**错误:** PlatformIO 安装过程中出现各种错误
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 确保 VS Code 是最新版本
|
|
|
2. 先安装 C/C++ 扩展
|
|
|
3. 安装 PlatformIO 后重启 VS Code
|
|
|
4. 检查网络连接(PlatformIO 需要下载大文件)
|
|
|
|
|
|
#### 问题:PlatformIO 无法检测到开发板
|
|
|
**症状:** 无法上传代码到 Wio Terminal
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 尝试更换 USB 线(有些线只支持充电)
|
|
|
2. 检查设备管理器(Windows)或执行 `ls /dev/tty*`(macOS/Linux)
|
|
|
3. 安装或更新 USB 驱动
|
|
|
4. 尝试不同 USB 端口
|
|
|
5. 快速滑动 Wio Terminal 电源开关两次进入引导加载模式
|
|
|
|
|
|
#### 问题:PlatformIO 编译错误
|
|
|
**错误:** `fatal error: Arduino.h: 没有那个文件或目录`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 删除项目中的 `.pio` 文件夹
|
|
|
2. 从命令面板运行“PlatformIO: 重建”
|
|
|
3. 确认 `platformio.ini` 中板子配置正确:
|
|
|
```ini
|
|
|
[env:seeed_wio_terminal]
|
|
|
platform = atmelsam
|
|
|
board = seeed_wio_terminal
|
|
|
framework = arduino
|
|
|
```
|
|
|
|
|
|
### Grove 库
|
|
|
|
|
|
#### 问题:Raspberry Pi 上 Grove 库导入失败
|
|
|
**错误:** `ModuleNotFoundError: No module named 'grove'`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 重新安装 Grove 库:
|
|
|
```bash
|
|
|
cd ~
|
|
|
git clone https://github.com/Seeed-Studio/grove.py
|
|
|
cd grove.py
|
|
|
sudo pip3 install .
|
|
|
```
|
|
|
2. 如果使用虚拟环境,可能需要全局安装或复制库
|
|
|
3. 确认 I2C 已启用:`sudo raspi-config nonint do_i2c 0`
|
|
|
|
|
|
#### 问题:Grove 传感器未检测到
|
|
|
**错误:** `IOError: [Errno 121] 远程 I/O 错误`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查物理连接(确保 Grove 数据线完全插入)
|
|
|
2. 确认传感器连接到正确的端口(模拟、数字、I2C、UART)
|
|
|
3. 运行 `i2cdetect -y 1` 查看设备是否出现在 I2C 总线上
|
|
|
4. 尝试更换 Grove 数据线
|
|
|
5. 确保 Grove Base Hat 正确安装在树莓派 GPIO 针脚上
|
|
|
|
|
|
---
|
|
|
|
|
|
## 硬件问题
|
|
|
|
|
|
### 树莓派
|
|
|
|
|
|
#### 问题:树莓派无法启动
|
|
|
**症状:** 无显示,无 LED 动作,或出现彩虹屏
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **检查电源:** 使用官方 5V 3A USB-C 电源(针对 Pi 4)
|
|
|
2. **SD 卡问题:**
|
|
|
- 重新格式化 SD 卡并重新安装 Raspberry Pi OS
|
|
|
- 尝试不同的 SD 卡(推荐品牌)
|
|
|
- 确保 SD 卡正确插入
|
|
|
3. **检查 HDMI 连接:** 尝试 Pi 4 上两个 HDMI 端口,使用靠近电源的 HDMI 端口
|
|
|
|
|
|
#### 问题:无法通过 SSH 连接树莓派
|
|
|
**症状:** 连接被拒绝或超时
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 启用 SSH:
|
|
|
- 使用 Raspberry Pi Imager 烧录 SD 卡时,在高级选项配置 SSH
|
|
|
- 或在启动分区创建一个名为 `ssh`(无扩展名)的空文件
|
|
|
2. 查找树莓派 IP 地址:
|
|
|
- 查看路由器的已连接设备列表
|
|
|
- 使用 `ping raspberrypi.local`(如果 mDNS 有效)
|
|
|
- 使用网络扫描工具如 `nmap` 或 Angry IP Scanner
|
|
|
3. 检查网络:
|
|
|
- 确保树莓派和电脑在同一网络内
|
|
|
- 尝试使用有线以太网连接替代 WiFi
|
|
|
4. 验证用户名/密码(默认用户名 `pi`,密码 `raspberry`)
|
|
|
|
|
|
#### 问题:未识别 Grove Base Hat
|
|
|
**症状:** 传感器无法工作,出现 I2C 错误
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 确保 Base Hat 正确插在所有 GPIO 针脚上
|
|
|
2. 检查树莓派和 Base Hat 是否有弯曲的针脚
|
|
|
3. 启用 I2C 接口:
|
|
|
```bash
|
|
|
sudo raspi-config nonint do_i2c 0
|
|
|
sudo reboot
|
|
|
```
|
|
|
4. 验证 I2C 工作:`i2cdetect -y 1`
|
|
|
|
|
|
#### 问题:树莓派运行缓慢
|
|
|
**症状:** 用户界面卡顿,响应迟缓
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查 SD 卡速度(使用 10 级或更高,或通过 USB 使用 SSD)
|
|
|
2. 释放磁盘空间:使用 `df -h` 检查,删除不必要的文件
|
|
|
3. 如果不频繁使用摄像头/显示,减少 `raspi-config` 中 GPU 内存分配
|
|
|
4. 关闭无用的应用程序
|
|
|
5. 如果使用的是 Pi 3 或更早版本,考虑升级到带更多内存的 Pi 4
|
|
|
|
|
|
### Wio Terminal
|
|
|
|
|
|
#### 问题:Wio Terminal 屏幕保持空白
|
|
|
**症状:** 上传代码后无显示输出
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查代码是否初始化显示(如 TFT_eSPI 库)
|
|
|
2. 从 [Seeed Wiki](https://wiki.seeedstudio.com/Wio-Terminal-Getting-Started/) 更新 Wio Terminal 固件
|
|
|
3. 添加显示初始化代码:
|
|
|
```cpp
|
|
|
#include <TFT_eSPI.h>
|
|
|
TFT_eSPI tft;
|
|
|
tft.begin();
|
|
|
tft.fillScreen(TFT_BLACK);
|
|
|
```
|
|
|
4. 尝试用 PlatformIO 上传示例程序测试硬件
|
|
|
|
|
|
#### 问题:Wio Terminal 无法连接 WiFi
|
|
|
**症状:** 无法连接 WiFi,网络错误
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **更新 WiFi 固件:** 参考 [Wio Terminal WiFi 固件升级指南](https://wiki.seeedstudio.com/Wio-Terminal-Network-Overview/)
|
|
|
2. **核对 WiFi 账号密码:** 确保 SSID 和密码正确
|
|
|
3. **WiFi 频段:** Wio Terminal 只支持 2.4GHz WiFi(不支持 5GHz)
|
|
|
4. **信号强度:** 设备靠近路由器
|
|
|
5. **路由器设置:** 企业/WPA-Enterprise 网络可能无法连接
|
|
|
|
|
|
#### 问题:计算机无法识别 Wio Terminal
|
|
|
**症状:** USB 设备未被检测到
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **更换 USB 线:** 使用数据线,非仅充电线
|
|
|
2. **进入引导加载模式:** 快速向下滑动电源开关两次
|
|
|
- 蓝色 LED 会脉冲闪烁,设备在设备管理器显示为 “Arduino”
|
|
|
3. **安装驱动(Windows):**
|
|
|
- 下载并安装 [Seeed USB 驱动程序](https://wiki.seeedstudio.com/Driver_for_Seeeduino/)
|
|
|
4. **尝试不同 USB 端口:** 避免使用 USB 集线器,直接连接
|
|
|
5. **更新系统 USB 驱动**
|
|
|
|
|
|
#### 问题:Wio Terminal 传感器无法工作
|
|
|
**症状:** Grove 传感器无数据读取
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查 Grove 线连接
|
|
|
2. 确认使用正确的 Grove 端口(左侧或右侧)
|
|
|
3. 包含正确的传感器库
|
|
|
4. 检查传感器的供电要求
|
|
|
5. 使用库中的示例代码测试传感器
|
|
|
|
|
|
### 虚拟设备(CounterFit)
|
|
|
|
|
|
#### 问题:CounterFit 应用无法启动
|
|
|
**错误:** 启动 CounterFit 时出现各种 Python 错误
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 确保虚拟环境已激活
|
|
|
2. 安装/重新安装 CounterFit:
|
|
|
```bash
|
|
|
pip install CounterFit
|
|
|
```
|
|
|
3. 检查端口 5000 是否被占用:
|
|
|
- Windows: `netstat -ano | findstr :5000`
|
|
|
- macOS/Linux: `lsof -i :5000`
|
|
|
4. 结束占用端口 5000 的进程或使用其他端口:
|
|
|
```bash
|
|
|
counterfit --port 5001
|
|
|
```
|
|
|
|
|
|
#### 问题:代码无法连接 CounterFit
|
|
|
**错误:** 连接被拒绝或超时
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 确认 CounterFit 正在运行:在浏览器访问 `http://127.0.0.1:5000`
|
|
|
2. 检查代码中的连接 URL 是否与 CounterFit 地址匹配
|
|
|
3. 确认防火墙未阻止连接
|
|
|
4. 尝试重启 CounterFit 应用和代码
|
|
|
|
|
|
#### 问题:CounterFit 中未显示传感器
|
|
|
**症状:** 创建的传感器不显示在 CounterFit 界面
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 在运行代码前先在 CounterFit UI 中创建传感器
|
|
|
2. 刷新浏览器页面
|
|
|
3. 检查传感器类型是否与代码期望匹配
|
|
|
4. 清空浏览器缓存
|
|
|
|
|
|
---
|
|
|
|
|
|
## 连接问题
|
|
|
|
|
|
### WiFi 连接
|
|
|
|
|
|
#### 问题:设备无法连接 WiFi
|
|
|
**症状:** 连接超时,认证失败
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **核对 SSID 和密码:** 确认凭据正确
|
|
|
2. **WiFi 频段:** 大多数 IoT 设备仅支持 2.4GHz(不支持 5GHz)
|
|
|
3. **路由器设置:**
|
|
|
- 关闭 AP 隔离(若启用)
|
|
|
- 使用 WPA2-PSK 安全性(避免 WPA3、WEP 或开放网络)
|
|
|
- 确保启用 DHCP
|
|
|
4. **隐藏网络:** 如果 SSID 隐藏,可能需要手动配置
|
|
|
5. **信号强度:** 设备靠近路由器
|
|
|
6. **无线干扰:** 其他设备、微波炉或墙壁可能干扰信号
|
|
|
|
|
|
#### 问题:WiFi 连接频繁断开
|
|
|
**症状:** 连接不稳定,时断时连
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查路由器稳定性并考虑重启
|
|
|
2. 更新设备固件
|
|
|
3. 使用静态 IP 代替 DHCP
|
|
|
4. 减小与路由器距离或添加 WiFi 扩展器
|
|
|
5. 检查其他设备的干扰
|
|
|
6. 核实电源供应是否充足(尤其是树莓派)
|
|
|
|
|
|
### 云服务
|
|
|
|
|
|
#### 问题:无法连接 Azure IoT Hub
|
|
|
**错误:** 认证失败,连接被拒绝
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **核对凭据:**
|
|
|
- 检查连接字符串是否正确
|
|
|
- 确保连接字符串中无额外空格或换行
|
|
|
2. **设备注册:** 设备必须在 IoT Hub 中注册
|
|
|
3. **防火墙/代理:** 确保允许出站 MQTT(端口 8883)或 HTTPS(端口 443)
|
|
|
4. **IoT Hub 区域:** 确保 IoT Hub 正常运行,且不在不同区域导致延迟
|
|
|
5. **配额限制:** 检查是否超过免费层限制
|
|
|
6. **测试连接:**
|
|
|
```bash
|
|
|
az iot hub device-identity show-connection-string --hub-name YourIoTHub --device-id YourDevice
|
|
|
```
|
|
|
|
|
|
#### 问题:Azure Functions 未触发
|
|
|
**症状:** 消息已发送但函数未执行
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 检查 Function App 是否正在运行(未停止)
|
|
|
2. 验证 Function App 设置中的连接字符串
|
|
|
3. 在 Azure 门户查看函数日志
|
|
|
4. 确保已正确配置 Event Hub 兼容端点
|
|
|
5. 确认消息格式符合函数预期
|
|
|
6. 检查 Function App 服务计划(消费型与专用型)
|
|
|
|
|
|
### MQTT
|
|
|
#### 问题:MQTT 连接失败
|
|
|
**错误:** 连接被拒绝,身份验证失败
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **代理地址:** 验证代理 URL/IP 是否正确
|
|
|
2. **端口:** 检查端口号(1883 为不加密,8883 为 TLS)
|
|
|
3. **身份验证:** 如需验证,核实用户名/密码
|
|
|
4. **TLS/SSL:** 确保证书有效且受信任
|
|
|
5. **防火墙:** 检查端口是否被阻止
|
|
|
6. **使用 MQTT 客户端测试:** 使用 MQTT Explorer 或 mosquitto_pub/sub 测试
|
|
|
|
|
|
#### 问题:未收到 MQTT 消息
|
|
|
**症状:** 发布了消息,但订阅者未收到
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **主题名称:** 验证订阅者主题与发布者主题完全匹配
|
|
|
2. **QoS 级别:** 尝试 QoS 1 或 2 替代 0
|
|
|
3. **通配符:** 检查主题通配符使用正确(`+` 表示单层,`#` 表示多层)
|
|
|
4. **保留消息:** 发布者可设置保留标志以保留最后一条消息
|
|
|
5. **连接时机:** 确认订阅者在消息发布前已连接
|
|
|
|
|
|
---
|
|
|
|
|
|
## 传感器和执行器问题
|
|
|
|
|
|
### Grove 传感器
|
|
|
|
|
|
#### 问题:传感器返回错误值
|
|
|
**症状:** 读数为 0、-1 或无意义的值
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **检查连接:** 确保传感器正确连接
|
|
|
2. **正确端口:** 验证传感器接入正确端口类型:
|
|
|
- 模拟传感器 → 模拟端口(A0、A2、A4)
|
|
|
- 数字传感器 → 数字端口(D5、D16、D18 等)
|
|
|
- I2C 传感器 → I2C 端口
|
|
|
3. **校准:** 某些传感器需要校准(如土壤湿度、光照)
|
|
|
4. **断电重连:** 断开并重新连接传感器
|
|
|
5. **传感器数据手册:** 查阅传感器规格和要求
|
|
|
|
|
|
#### 问题:电容式土壤湿度传感器总是显示潮湿
|
|
|
**症状:** 土壤干燥时传感器仍显示高湿度
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **需要校准:** 土壤传感器需校准:
|
|
|
- 在空气中读取值(干燥基线)
|
|
|
- 在水中读取值(湿润基线)
|
|
|
- 映射这两个值之间的读数
|
|
|
2. **检查传感器涂层:** 若涂层受损,湿度传感器可能性能下降
|
|
|
3. **安装位置:** 确保传感器完全插入土壤
|
|
|
|
|
|
#### 问题:温湿度传感器读数错误
|
|
|
**症状:** DHT11/DHT22 显示错误温度或湿度
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **传感器位置:** 避免阳光直射、热源或气流
|
|
|
2. **预热时间:** 传感器上电后等待 2 秒再读取
|
|
|
3. **读取频率:** DHT 传感器需要读取间隔(至少 2 秒)
|
|
|
4. **检查冷凝水:** 冷凝可能影响读数
|
|
|
5. **传感器质量:** DHT11 精度低于 DHT22
|
|
|
|
|
|
### 摄像头
|
|
|
|
|
|
#### 问题:树莓派未检测到摄像头
|
|
|
**错误:** `mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera'`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **启用摄像头接口:**
|
|
|
```bash
|
|
|
sudo raspi-config
|
|
|
```
|
|
|
|
|
|
进入 Interface Options → Camera → Enable
|
|
|
2. **检查扁平电缆:** 确保摄像头线正确插入
|
|
|
- Pi Zero 上蓝色面朝向 USB 端口
|
|
|
- Pi 4 上蓝色面背向 USB 端口
|
|
|
3. **更新固件:**
|
|
|
```bash
|
|
|
sudo apt update
|
|
|
sudo apt full-upgrade
|
|
|
sudo reboot
|
|
|
```
|
|
|
|
|
|
4. **测试摄像头:**
|
|
|
```bash
|
|
|
raspistill -o test.jpg
|
|
|
```
|
|
|
|
|
|
#### 问题:摄像头图像质量差
|
|
|
**症状:** 模糊、暗淡或曝光不足的图像
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **对焦:** 去除镜头保护膜,若可调节则调整对焦
|
|
|
2. **光照:** 确保光线充足
|
|
|
3. **摄像头设置:** 在代码中调整曝光、ISO、白平衡
|
|
|
4. **稳定性:** 固定摄像头,必要时使用三脚架
|
|
|
5. **分辨率:** 不要超过摄像头最大分辨率
|
|
|
|
|
|
### 麦克风和扬声器
|
|
|
|
|
|
#### 问题:无音频输入/输出
|
|
|
**症状:** 麦克风无录音,扬声器无声音
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **检查连接:** 确认音频设备正确连接
|
|
|
2. **测试硬件:**
|
|
|
- 扬声器:`speaker-test -t wav -c 2`
|
|
|
- 麦克风:`arecord -l` 查看设备,`arecord test.wav` 录音
|
|
|
3. **音量设置:** 检查并调整音量:
|
|
|
```bash
|
|
|
alsamixer
|
|
|
```
|
|
|
|
|
|
4. **选择音频设备:** 在代码中指定正确的音频设备
|
|
|
5. **驱动问题:** 更新 ALSA 或重新安装音频驱动
|
|
|
|
|
|
#### 问题:ReSpeaker 扩展板不起作用
|
|
|
**症状:** 音频设备未被检测到
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **安装驱动程序:**
|
|
|
```bash
|
|
|
git clone https://github.com/HinTak/seeed-voicecard
|
|
|
cd seeed-voicecard
|
|
|
sudo ./install.sh
|
|
|
sudo reboot
|
|
|
```
|
|
|
|
|
|
2. **检查安装:** `arecord -l` 应显示 ReSpeaker
|
|
|
3. **更新固件:** 某些 Pi OS 版本需更新驱动
|
|
|
4. **检查插接:** 确保扩展板正确插入 GPIO 针脚
|
|
|
|
|
|
---
|
|
|
|
|
|
## 开发环境问题
|
|
|
|
|
|
### VS Code
|
|
|
|
|
|
#### 问题:终端未自动激活虚拟环境
|
|
|
**症状:** 终端打开但虚拟环境未激活
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **设置 Python 解释器:** 命令面板 → "Python: Select Interpreter" → 选择虚拟环境
|
|
|
2. 选择后重启 VS Code
|
|
|
3. 在 `settings.json` 中添加:
|
|
|
```json
|
|
|
"python.terminal.activateEnvironment": true
|
|
|
```
|
|
|
|
|
|
#### 问题:代码在设备上未运行
|
|
|
**症状:** 代码运行但设备无反应
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **确认代码已保存**(查看文件标签上的点)
|
|
|
2. **检查 Python 版本路径:** 运行 `which python` 或 `where python`
|
|
|
3. **Wio Terminal:** 确保代码通过 PlatformIO 上传(点击上传按钮)
|
|
|
4. **树莓派:** SSH 登录树莓派并在上面运行代码
|
|
|
5. **检查输出窗口** 是否有错误信息
|
|
|
|
|
|
#### 问题:智能感知未显示库函数
|
|
|
**症状:** 导入模块未自动补全
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 确保库已安装于当前环境
|
|
|
2. 重载 VS Code 窗口
|
|
|
3. 检查 Python 解释器正确
|
|
|
4. 安装类型声明(若有):`pip install types-<library-name>`
|
|
|
|
|
|
### Python 虚拟环境
|
|
|
|
|
|
#### 问题:无法创建虚拟环境
|
|
|
**错误:** `The virtual environment was not created successfully`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **安装 venv 模块:**
|
|
|
- Ubuntu/Debian: `sudo apt install python3-venv`
|
|
|
- macOS: Python 自带,通常已包含
|
|
|
- Windows: 重新安装完整的 Python
|
|
|
2. **检查 Python 安装:** 确保安装正确
|
|
|
3. **使用完整路径:** 试用 `python3 -m venv .venv` 明确调用 python3
|
|
|
|
|
|
#### 问题:包安装到了错误的位置
|
|
|
**症状:** 安装包后导入失败
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **确认虚拟环境已激活:** 命令提示符应显示 `(.venv)`
|
|
|
2. **检查 pip 位置:** `which pip` 应指向 `.venv/bin/pip`
|
|
|
3. **激活 venv 后重新安装包:** `pip install <package>`
|
|
|
4. **虚拟环境中不要用 sudo 安装 pip 包**
|
|
|
|
|
|
#### 问题:虚拟环境不可移植
|
|
|
**症状:** 移动后或不同电脑上虚拟环境无法使用
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **不要移动虚拟环境文件夹:** 删除后在新位置重新创建
|
|
|
2. **使用 requirements.txt:**
|
|
|
```bash
|
|
|
pip freeze > requirements.txt
|
|
|
pip install -r requirements.txt
|
|
|
```
|
|
|
|
|
|
3. **重新创建虚拟环境:**
|
|
|
```bash
|
|
|
python3 -m venv .venv
|
|
|
source .venv/bin/activate # 或在 Windows 上使用 activate.bat
|
|
|
pip install -r requirements.txt
|
|
|
```
|
|
|
|
|
|
### 依赖项
|
|
|
|
|
|
#### 问题:包安装失败
|
|
|
**错误:** 安装时出现各种 pip 错误
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **升级 pip:**
|
|
|
```bash
|
|
|
pip install --upgrade pip
|
|
|
```
|
|
|
|
|
|
2. **安装编译工具:**
|
|
|
- Ubuntu/Debian: `sudo apt install build-essential python3-dev`
|
|
|
- macOS: `xcode-select --install`
|
|
|
- Windows: 安装 Visual Studio Build Tools
|
|
|
3. **检查网络连接**
|
|
|
4. **尝试不同的包索引:** `pip install --index-url https://pypi.org/simple/ <package>`
|
|
|
5. **安装特定版本:** `pip install <package>==<version>`
|
|
|
|
|
|
#### 问题:依赖冲突
|
|
|
**错误:** `ERROR: pip's dependency resolver does not currently take into account all the packages that are installed`
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **为每个项目使用全新虚拟环境**
|
|
|
2. **更新包:** `pip install --upgrade <package>`
|
|
|
3. **检查依赖:** 使用 `pip check` 查找冲突
|
|
|
4. **安装兼容版本:** 在 requirements.txt 指定版本范围
|
|
|
|
|
|
---
|
|
|
|
|
|
## 性能问题
|
|
|
|
|
|
### 问题:代码运行缓慢
|
|
|
**症状:** 延迟、超时、无响应
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **减少传感器读取频率:** 避免过于频繁读取传感器
|
|
|
2. **优化循环:** 避免忙等待,使用 sleep() 或延时
|
|
|
3. **内存问题:**
|
|
|
- 关闭不必要程序
|
|
|
- 释放存储空间
|
|
|
- 在树莓派上用 `top` 或 `htop` 监控
|
|
|
4. **SD 卡速度:** 使用更快的 SD 卡或 SSD
|
|
|
5. **网络延迟:** 网络调用使用异步操作
|
|
|
|
|
|
### 问题:内存不足错误
|
|
|
**错误:** `MemoryError` 或系统卡死
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **树莓派:**
|
|
|
- 关闭不必要程序
|
|
|
- 增加交换空间
|
|
|
- 使用轻量版系统(Lite 版)
|
|
|
- 升级内存(Pi 4 有 2/4/8GB 选项)
|
|
|
2. **Wio Terminal:**
|
|
|
- 减小缓冲区大小
|
|
|
- 使用更小图片
|
|
|
- 优化字符串使用
|
|
|
- 检查内存泄漏(未释放内存)
|
|
|
|
|
|
### 问题:数据丢失或损坏
|
|
|
**症状:** 消息缺失,文件损坏
|
|
|
|
|
|
**解决方案:**
|
|
|
1. **SD 卡问题:**
|
|
|
- 使用质量可靠 SD 卡(避免廉价/仿冒)
|
|
|
- 定期备份
|
|
|
- 正确关机(避免断电)
|
|
|
2. **缓冲区溢出:** 增大代码中的缓冲区大小
|
|
|
3. **网络可靠性:** 实现重试逻辑和错误处理
|
|
|
4. **服务质量:** 重要消息使用 MQTT QoS 1 或 2
|
|
|
|
|
|
---
|
|
|
|
|
|
## 常见错误信息
|
|
|
|
|
|
### `ModuleNotFoundError: No module named 'X'`
|
|
|
**原因:** 包未安装或虚拟环境未激活
|
|
|
|
|
|
**解决方案:**
|
|
|
```bash
|
|
|
pip install X
|
|
|
```
|
|
|
|
|
|
确保先激活虚拟环境。
|
|
|
|
|
|
### Linux/macOS 上 `Permission denied`
|
|
|
**原因:** 需要提升权限或文件权限问题
|
|
|
|
|
|
**解决方案:**
|
|
|
- 系统操作:使用 `sudo`
|
|
|
- pip:虚拟环境中不要用 sudo,先激活虚拟环境
|
|
|
- 串口权限:添加用户到 dialout 组:`sudo usermod -a -G dialout $USER`,然后注销重新登录
|
|
|
|
|
|
### `OSError: [Errno 98] Address already in use`
|
|
|
**原因:** 端口已被其他进程占用
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 查找占用端口的进程:`lsof -i :<port>` 或 `netstat -ano | findstr :<port>`
|
|
|
2. 结束进程或在代码中使用不同端口
|
|
|
|
|
|
### `SSL: CERTIFICATE_VERIFY_FAILED`
|
|
|
**原因:** SSL 证书验证失败
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 更新证书:`pip install --upgrade certifi`
|
|
|
2. 检查系统时间是否正确:`date`
|
|
|
3. 仅限开发(非生产环境):禁用代码中的验证
|
|
|
|
|
|
### `IndentationError: unexpected indent`
|
|
|
**原因:** Python 缩进问题(混用制表符与空格)
|
|
|
|
|
|
**解决方案:**
|
|
|
1. 使用统一缩进(Python 标准为 4 个空格)
|
|
|
2. 配置编辑器使用空格替代制表符
|
|
|
3. VS Code 设置 `"editor.insertSpaces": true` 和 `"editor.tabSize": 4`
|
|
|
|
|
|
### `UnicodeDecodeError` 或 `UnicodeEncodeError`
|
|
|
**原因:** 字符编码问题
|
|
|
|
|
|
**解决方案:**
|
|
|
```python
|
|
|
# 读取文件时
|
|
|
with open('file.txt', 'r', encoding='utf-8') as f:
|
|
|
content = f.read()
|
|
|
|
|
|
# 写入文件时
|
|
|
with open('file.txt', 'w', encoding='utf-8') as f:
|
|
|
f.write(content)
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 寻求帮助
|
|
|
|
|
|
如果尝试以上解决步骤后仍有问题:
|
|
|
|
|
|
### 1. 查看已有资源
|
|
|
- **文档:** 查看 [README](README.md) 和课程指引
|
|
|
- **硬件指南:** 查看 [hardware.md](hardware.md) 获取硬件相关信息
|
|
|
- **Seeed Studio 维基:** [Seeed Studio Wiki](https://wiki.seeedstudio.com/) 了解 Grove 组件
|
|
|
|
|
|
### 2. 搜索类似问题
|
|
|
- **GitHub Issues:** 搜索 [现有问题](https://github.com/microsoft/IoT-For-Beginners/issues)
|
|
|
- **Stack Overflow:** 搜索错误消息
|
|
|
- **设备论坛:** 查看树莓派论坛或 Arduino 论坛
|
|
|
|
|
|
### 3. 创建 GitHub Issue
|
|
|
如果找不到解决方法:
|
|
|
1. 访问 [GitHub Issues](https://github.com/microsoft/IoT-For-Beginners/issues)
|
|
|
2. 点击“New Issue”
|
|
|
3. 提供:
|
|
|
- 清晰的问题描述
|
|
|
- 重现步骤
|
|
|
- 错误全日志
|
|
|
- 硬件/软件版本
|
|
|
- 已尝试的解决方法
|
|
|
- 相关截图(如有)
|
|
|
|
|
|
### 4. 加入社区
|
|
|
- **Discord:** [Microsoft Foundry Discord](https://discord.gg/nTYy5BXMWG)
|
|
|
- **Microsoft Learn:** [Microsoft Learn IoT](https://docs.microsoft.com/learn/browse/?products=azure-iot)
|
|
|
|
|
|
### 5. 提供优质的错误报告
|
|
|
一个好的错误报告应包括:
|
|
|
- **环境:** 操作系统、Python 版本、使用的硬件
|
|
|
- **复现步骤:** 导致问题的具体步骤
|
|
|
- **预期行为:** 应该发生什么
|
|
|
- **实际行为:** 实际发生了什么
|
|
|
- **错误信息:** 完整的错误文本,不是截图
|
|
|
- **代码:** 能复现问题的最小代码示例
|
|
|
|
|
|
---
|
|
|
|
|
|
## 预防小贴士
|
|
|
|
|
|
### 一般最佳实践
|
|
|
1. **保持备份:** 定期备份正常工作的 SD 卡/代码
|
|
|
2. **记录变更:** 在注释中记录有效的方法
|
|
|
3. **版本控制:** 使用 git 跟踪代码变更
|
|
|
4. **逐步测试:** 在合并之前测试小的改动
|
|
|
5. **阅读错误信息:** 它们通常会告诉你具体问题所在
|
|
|
6. **定期更新:** 保持软件/固件的最新状态
|
|
|
7. **使用高质量组件:** 避免使用劣质数据线/电源
|
|
|
8. **稳定供电:** 使用适当的电源(尤其是树莓派)
|
|
|
|
|
|
### 开发工作流程
|
|
|
1. **从简单开始:** 先使用能正常运行的示例代码
|
|
|
2. **一次改动一点:** 更容易定位故障原因
|
|
|
3. **频繁测试:** 尽早发现问题
|
|
|
4. **保持整洁:** 逻辑性地组织文件和代码
|
|
|
5. **注释代码:** 未来的你会感激现在的努力
|
|
|
|
|
|
---
|
|
|
|
|
|
*此故障排除指南由社区维护。如果您找到此处未列出的问题解决方案,请考虑[贡献](CONTRIBUTING.md)帮助更多人!*
|
|
|
|
|
|
---
|
|
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
|
**免责声明**:
|
|
|
本文件使用 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 进行翻译。虽然我们努力确保准确性,但请注意自动翻译可能包含错误或不准确之处。原始语言版本的文件应被视为权威来源。对于重要信息,建议使用专业人工翻译。因使用本翻译而产生的任何误解或误释,我们不承担任何责任。
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |