C# NanoFramework使用ESP32开发超声波测距传感器 HC-SR04
前言
最近自己开始研究ESP32,本身是对c#比较熟悉就在网上找了关于c#开发开发esp32的框架,最后选择了NanoFramework框架.具体支持的功能和详细资料可以参考github上NanoFramework的项目
一.ESP32刷机
1.环境准备
-
安装好VisualStudio2019或者VisualStudio2022.我这边用的VisualStudio2022.
具体安装步骤这里忽略 -
本机的dotnet 环境安装好.
具体安装步骤这里忽略
2.刷机
- 1.将esp32使用数据线连接到电脑上.
- 2.打开电脑设备管理器,查看端口设备.
这边显示是COM3的端口,如果没有看到对应的端口设备,可能是数据线坏了,也可能是esp32的驱动没装,我这边用的esp32的驱动是CH340的. - 3.安装刷机工具Nanoff
dotnet tool install -g nanoff
- 4.执行刷机命令
nanoff --serialport COM3 --target ESP32_PSRAM_REV0 --update
对应的COM3需要换成你自己的电脑上的端口号
正常刷完后就行是这样
二.NanoFramework安装
1.安装NanoFreamwork VS 扩展安装
打开VS,选择继续但无需代码
点击扩展,选择管理扩展.
点击联机,搜索nano,选择.Net 哪弄Framework Extension 点击下载.下载完后点击下一步安装就OK.安装完成后需要关闭VS.
如果下载的太慢或者无法下载,可以在VS扩展网站下载该插件
三.超声波测距模块开发
1.创建NanoFreamwork 项目
- VS关闭后从新打开>选择创建新项目> 搜索nano> 选择 Blank Application(空白的应用) > 点击下一步 > 输入项目名字> 点击创建
打开设备管理 - 点击视图>其他窗口>Device Explorer
(1). ping 设备,点击后 VS 输出里会有以下的信息
(2). 设备信息收集
(3). 擦除应用部署区域(移除项目应用)
(4). 网络信息编辑和设置
(5). 重启设备
(6). 启动或者关闭设备监听(就是监听设备是否存在)
(7). 重新搜寻设备信息
(8). 输出内部错误(VS输出里看到)
(9). 设置信息
连接不上的处理
如果不正常那就是刷机(固件)有问题,请重新刷一下,然后,重启一下单片机,试试,应该就好了。
2.安装相关NanoFreamwork 开发包
NanoFreamwork 相关的开发都可以在Nuget中安装,包括用的的GPIO,串口,各种传感器,蓝牙,wifi,server等,目前这里只安装需要的超声波测距模块HC-SR04的开发包.
- 点击工具>Nuget包管理器>管理解决方案的Nuget程序包.
更新nanoFramework.CoreLibrary
在步骤一种刷机使用的固件默认是最新版本的,但是在新建项目中使用的核心组件库不一定是最新版本的,这里需要保持刷机的固件和项目中的nanoFramework.CoreLibrary保持版号一致,否则会在运行的时候报错
- 搜索nanoFramework.CoreLibrary > 选择nanoFramework.CoreLibrary > 勾选对应的解决方案 > 选择最新的版本 > 点击安装
安装nanoFramework.Iot.Device.Hcsr04.Esp32
这个是开发超声波测距传感器需要用的组件包
- 搜索nanoFramework.Iot.Device.Hcsr04.Esp32 > 选择nanoFramework.Iot.Device.Hcsr04.Esp32> 勾选对应的解决方案 > 选择最新的版本 > 点击安装
3.超声波测距模块代码及调试
对于nanoFramework支持的各种传感器可以在github上的nanoFramework.IoT.Device中找到对应的代码示例.
下面用超声波测距传感器HC-SR04为例,对应的github上的README.md
这里对应ESP32上我使用的gpio口是17和16. trig用的是17,echo用的是16
using System;
using System.Diagnostics;
using System.Threading;
using Iot.Device.Hcsr04.Esp32;
using UnitsNet;
namespace NanoFreamworkDemo
{
public class Program
{
public static void Main()
{
using (var sonar = new Hcsr04(17, 16))
{
while (true)
{
if (sonar.TryGetDistance(out Length distance))
{
Debug.WriteLine($"Distance: {distance.Centimeters} cm");
}
else
{
Debug.WriteLine("Error reading sensor");
}
Thread.Sleep(1000);
}
}
}
}
}
- 点击运行按键,就会开始将代码烧录到esp32中了.
- 正常情况就看到下面出现测距传感器的输出.
常见问题解决办法
提示版本不对
更新组件库
烧录没有反应
esp32重启一下,可以直接拔插数据线,也可以通过VS中的Device Explorer点击reboot.