使用 CounterFit 搭建虚拟单板计算机:在 PC 上零硬件完成 IoT 课程实战(IoT-For-Beginners)
2026/9/15 22:09:11 网站建设 项目流程

使用 CounterFit 搭建虚拟单板计算机:在 PC 上零硬件完成 IoT 课程实战(IoT-For-Beginners)

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

本篇指南围绕开源课程 IoT-For-Beginners 中 虚拟单板计算机(Virtual single-board computer) 这一课时展开,详细讲解如何借助开源项目 CounterFit,在无需购买任何物理 IoT 硬件的前提下,用普通 PC 模拟传感器与执行器,并运行与 Raspberry Pi 物理硬件上完全一致的 Python 代码。读完本文,你将掌握从环境安装、Python 虚拟环境配置、Hello World 验证,到打通 CounterFit 虚拟「硬件」连接的完整实操路径,为后续「夜灯(nightlight)」项目及整个课程其余 23 课扫清起步障碍。

为什么需要一台「虚拟」单板计算机

IoT 课程的传统做法是购买开发板(如 Arduino 或 Raspberry Pi)配合传感器与执行器动手实践。但 IoT-For-Beginners 项目为所有课程提供了三种硬件选型路径,其中一条就是「虚拟设备」:完全不需要采购任何硬件,用你自己的电脑模拟出单板计算机环境。

该方案的核心是开源项目CounterFit——它允许你在本地运行一个应用,模拟温度、湿度、光线、土壤湿度等传感器,以及 LED、继电器等执行器;随后,用本机 Python 代码以访问物理硬件完全相同的方式访问这些虚拟设备。正如课程 第一课 README 所强调的:

💁 你不必购买任何 IoT 硬件来完成作业,可以完全使用虚拟单板计算机来做。

而且虚拟设备路径与 Raspberry Pi 路径共享同一个 Grove 传感器生态,后续如果购买了实体树莓派与传感器,绝大部分代码可以直接迁移。

环境准备:三件免费软件

使用 CounterFit 前,需要在电脑上安装以下免费软件:

软件作用
Python编写虚拟设备代码的运行时环境
Visual Studio Code (VS Code)编写 Python 代码的编辑器(教程以 VS Code 为例)
Pylance 扩展为 VS Code 提供 Python 语言支持(智能提示、类型检查等)

💁 如果你有其他偏好的 Python IDE 或编辑器完全可以自由使用,但课程内所有指令均基于 VS Code 编写。

需要注意:CounterFit 应用本身不在本步骤安装,它按项目单独安装,相关指令会在后续「Hello World」阶段给出。

第一课 Hello World:验证工具链

在进入具体硬件或模拟逻辑之前,先按编程学习传统创建Hello World应用,用来确认三件事:

  1. Python 与 VS Code 安装正确;
  2. 能够连接到 CounterFit 的虚拟传感器与执行器服务;
  3. 整个开发链路端到端可用。

这个应用会被创建在名为nightlight的文件夹中,并在后续课程中不断复用、逐步演化为一个完整的「夜灯」IoT 应用。

配置 Python 虚拟环境

Python 的 Pip 包是别人编写并发布到互联网上的代码包,一条命令即可安装并使用。但默认情况下 Pip 包会安装到系统全局,容易出现版本冲突——例如应用 A 依赖某个包的旧版本,应用 B 安装新版本后 A 就坏了。Python 虚拟环境(venv)本质上是放在专用文件夹里的一个 Python 副本,Pip 包只安装到该文件夹内,从而彻底隔离依赖。

💁 如果你日后使用 Raspberry Pi,则无需(也不建议)在那台设备上设置虚拟环境——Grove 相关包已由安装脚本全局安装。

任务:创建虚拟环境并安装 CounterFit 相关 Pip 包。

  1. 在任意位置创建并进入项目目录:

    mkdir nightlight cd nightlight
  2. .venv文件夹中创建虚拟环境:

    python3 -m venv .venv

    💁 必须显式调用python3而非python,以防系统同时装有 Python 2 时python指向旧版本。

  3. 激活虚拟环境:

    • Windows(命令提示符 / Windows Terminal 的命令提示符):

      .venv\Scripts\activate.bat
    • Windows(PowerShell):

      .\.venv\Scripts\Activate.ps1

      若提示「在此系统上禁止运行脚本」,请以管理员身份启动 PowerShell 并执行:

      Set-ExecutionPolicy -ExecutionPolicy Unrestricted

      输入Y确认,然后重新启动 PowerShell 重试;该执行策略之后可按需重置。

    • macOS 或 Linux:

      source ./.venv/bin/activate

    💁 这些命令都应在创建虚拟环境的同一位置运行。永远不需要进入.venv文件夹,激活、装包、跑代码都从创建环境时的那个目录进行。

  4. 验证虚拟环境中的 Python 版本:

    python --version

    输出形如:

    (.venv) ➜ nightlight python --version Python 3.9.1

    💁 版本号可以不同,只要是 3.6 或更高即可;否则删除该文件夹、安装更新版 Python 后重试。

  5. 安装 CounterFit 的三个 Pip 包:

    pip install CounterFit pip install counterfit-connection pip install counterfit-shims-grove

    这三个包的分工如下:

    Pip 包作用
    CounterFit主应用,提供本地模拟服务与浏览器 UI
    counterfit-connection提供CounterFitConnection类,负责代码与 CounterFit 应用建立连接
    counterfit-shims-grove提供 Grove 硬件的 shim(垫片层),让你写出与使用 Grove 物理传感器/执行器完全一致的代码

    这些包只安装进当前虚拟环境,在该环境外不可用。

编写 Hello World 代码

任务:创建输出"Hello World"的 Python 应用。

  1. 在虚拟环境内创建app.py文件:

    • Windows:

      type nul > app.py
    • macOS / Linux:

      touch app.py
  2. 用 VS Code 打开当前文件夹:

    code .

    💁 若 macOS 提示command not found,说明 VS Code 未加入 PATH,按 VS Code 文档「从命令行启动」章节配置后再试;Windows 与 Linux 默认已加入 PATH。

  3. VS Code 启动后会自动激活 Python 虚拟环境,所选环境会显示在底部状态栏,状态栏与终端提示符中都会出现.venv前缀:

  4. 如果 VS Code 启动时终端已存在,则该终端不会自动激活虚拟环境,最稳妥的做法是用Kill the active terminal instance(终止活动终端实例)按钮关掉它:

  5. 通过Terminal -> New Terminal或快捷键CTRL+`新建终端,新终端会自动加载虚拟环境,终端中会出现激活调用,且提示符带.venv前缀:

    ➜ nightlight source .venv/bin/activate (.venv) ➜ nightlight
  6. 在 VS Code 中打开app.py并写入:

    print('Hello World!')

    print函数会把传入的内容输出到控制台。

  7. 在 VS Code 终端运行:

    python app.py

    输出:

    (.venv) ➜ nightlight python app.py Hello World!

至此,第一个 Hello World 验证成功,工具链就绪。

连接「硬件」:打通 CounterFit 虚拟设备

这是 Hello World 的第二个阶段:启动 CounterFit 应用并把代码连接上去——相当于把物理 IoT 硬件插到开发套件上的虚拟等价操作。

任务:启动 CounterFit 并建立连接。

  1. 在 VS Code 终端启动 CounterFit:

    counterfit

    应用启动后会在浏览器中打开界面,此时显示为Disconnected(未连接),右上角 LED 处于熄灭状态:

  2. app.py开头加入连接代码:

    from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000)

    第一行从counterfit_connection模块(来自之前安装的counterfit-connection包)导入CounterFitConnection类;第二行初始化到 CounterFit 应用的连接——127.0.0.1是永远指向本机的回环地址(即localhost),5000为默认端口。

    💁 若端口 5000 被其他程序占用,可同时修改两处:代码中的端口号,以及启动命令CounterFit --port <port_number>(将<port_number>替换为目标端口)。

  3. 由于当前终端正被 CounterFit 占用,需要点击Create a new integrated terminal(新建集成终端)按钮开启新终端:

  4. 在新终端中再次运行python app.py,CounterFit 界面状态会变为Connected,右上角 LED 亮起:

连接成功后,你就拥有了一个「虚拟」IoT 硬件环境。

从 Hello World 到真实传感器:源码级印证

Hello World 阶段只是建立了连接、尚未访问任何模拟硬件。在本课之后的 第 3 课:传感器与执行器 中,会在nightlight应用里真正读取虚拟传感器,其示例代码与本次配置一脉相承。课程提供的完整参考实现在 code/virtual-device/nightlight/app.py:

from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000) print('Hello World!')

该文件正是本文所讲步骤的最终落盘结果。而后续课程中虚拟设备读取光线传感器的典型写法(见 第 3 课 code-sensor 参考实现)则展示了如何把 shim 层用起来:

import time from counterfit_connection import CounterFitConnection from counterfit_shims_grove.grove_light_sensor_v1_2 import GroveLightSensor CounterFitConnection.init('127.0.0.1', 5000) light_sensor = GroveLightSensor(0) while True: light = light_sensor.light print('Light level:', light) time.sleep(1)

可以看到,代码模式与在树莓派上操作 Grove 物理光线传感器完全一致——这正是counterfit-shims-grove的核心价值:同一份业务代码,既可在虚拟环境调试运行,也能无缝移植到真实 Grove 硬件

从源码结构上看,CounterFitConnection.init(host, port)是建立连接的统一入口;counterfit命令行则以--port参数控制模拟服务的监听端口,二者端口必须一致才能握手成功,这是排查「一直 Disconnected」时最值得优先检查的点。

常见问题与排查要点

结合文档中的提示与源码调用关系,整理如下排查清单:

现象可能原因处理方式
python版本异常系统同时装有 Python 2创建环境时用python3 -m venv .venv
PowerShell 拒绝运行激活脚本系统执行策略受限管理员身份执行Set-ExecutionPolicy -ExecutionPolicy Unrestricted
python --version低于 3.6Python 版本过旧删除.venv,安装新版 Python 后重建
command not found(macOS)VS Code 不在 PATH按 VS Code 文档将code加入 PATH
终端提示符无.venv前缀虚拟环境未激活使用 Kill terminal + New Terminal 重新加载
CounterFit 一直 Disconnected端口不一致或未监听统一代码端口与CounterFit --port端口
虚拟环境外找不到包包仅装进 venv始终在激活状态下的.venv环境安装与运行

结语

通过本文,你已完成虚拟单板计算机的三步走:环境安装 → Hello World 验证 → CounterFit 连接打通。这套流程是 IoT-For-Beginners 课程中「零硬件起步」路径的地基——后续每一课(从夜灯传感器到云连接、再到机器学习边缘推理)都会在这个nightlight项目与 CounterFit 虚拟硬件之上持续演进。现在,打开你的终端,把counterfit跑起来,开始属于你的 IoT 之旅吧。

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询