摘要:非常高兴看到越来越多的.NET开发者开始关注 IOT,这是一个非常有趣的领域,也是一个非常有挑战的领域。随着物联网技术的不断发展,越来越多的设备和系统开始互联互通,创造了许多新的机会和应用场景。无论是智能家居、智慧城市,还是工业物联网,.NET 都能为开发者提
本文是一篇关于如何使用.NET玩转IOT的入门建议,结合我这几年的爬坑经验,希望能给大家一些帮助。
非常高兴看到越来越多的.NET开发者开始关注 IOT,这是一个非常有趣的领域,也是一个非常有挑战的领域。随着物联网技术的不断发展,越来越多的设备和系统开始互联互通,创造了许多新的机会和应用场景。无论是智能家居、智慧城市,还是工业物联网,.NET 都能为开发者提供强大的支持和便利。本文将结合我的实际经验,分享一些入门建议,帮助大家更好地利用 .NET 技术开发 IoT 应用。
IOT每个人接触 IoT 的原因可能各不相同。有人可能是因为对软件开发感到疲倦,想尝试控制一些硬件设备;有人可能是因为顺应潮流,对机器人、无人机或最近大热的 AI 助理感兴趣。我初次接触 IoT 是因为工作需要。当时公司有一个项目,要求设计一款部署在野外的边缘计算设备,既要能够控制外围设备,又要在低温环境下稳定运行。这个项目涉及到许多方面,除了 AI 模型和算法的设计外,更重要的是硬件设备的选型和核心控制器的设计。正是因为这个机会,我开始了解 IoT,并接触到了 NVIDIA Jetson 系列的边缘计算设备。
NVIDIA Jetson其实更重要的是,作为一个从小拆家电长大的程序员,我对硬件设备有着天然的好奇心。我想没有哪个男孩子能够拒绝亲手做一台属于自己的遥控车,或者一台属于自己的机器人。这种好奇心,也让我对 IoT 产生了浓厚的兴趣。
IOT小车通过不断探索和实践,我也逐渐掌握了一些 IoT 的基础知识,当然作为一个非专业人士,还有很多东西需要学习。幸运的是,现在有很多优秀的开源项目和社区,可以帮助我们快速入门,充分发挥 .NET 在这个领域的巨大潜力。
三种方式首先推荐的就是使用 .NET IoT 库,这个库是微软官方提供的,可以帮助我们快速开发 IoT 应用。更适合初学者,因为其使用完整的 .NET 框架,适用于边缘的 Linux 设备,对于 .NET 开发者来说,这是一个非常好的选择。根据官方提供的入门文档[2],详细的介绍了如何接线,如何编码,我们可以很容易地创建一个简单的 IoT 应用,比如控制一个 LED 灯。
其次,.NET nanoFramework 也是一个不错的选择。它是一个开源的 .NET 实现,受 .NET Foundation 支持,专门为嵌入式设备设计,可以在受限的小型设备上使用。它支持多种硬件平台,包括 ESP32、STM32 等。
官网上还有一个 Meadow,据说是唯一的全堆栈 IoT 平台。因为没有亲自使用过,所以不做评价。
我第一个接触的其实是 .NET IoT,当时做了一个超声波测距的 Demo,后来在 Jetson Nano 上做了一个 OLED 显示屏的驱动库Sang.IoT.SSD1306。之后,因为爱上了更加小巧便宜的 ESP32,于是便开始了更有挑战性的 .NET nanoFramework 之旅。在选择硬件设备时,我们需要考虑很多因素,比如设备的性能、功耗、价格、支持的接口等。对于初学者来说,推荐选择一些常见的硬件设备,比如树莓派、Arduino、ESP32 等。这些硬件设备都有很多优秀的开源项目和社区,可以帮助我们快速入门。
硬件设备如果你想做一些更加复杂的项目,比如机器人、无人机等,那么你可能需要一些更加专业的硬件设备,比如 Jetson Nano、Raspberry Pi 等。这些硬件设备性能更好,支持的接口更多,但价格也更高。当然,这些硬件设备也提供了更高的算力和更好的扩展性,可以帮助我们实现更多有趣的项目。
Jetson Nano对于初学者或只是想简单玩玩的朋友,推荐选择一些便宜的硬件设备,比如 Raspberry Pi Zero、Luckfox Pico Ultra 等,这些硬件设备价格便宜,大概在 100 到 200 元左右,性能也不错,并且可以安装 Ubuntu 22.04,可以很好地支持 .NET。
选择硬件也就是选择了你后面使用 .NET 开发 IoT 的方向。比如我选择了 ESP32,那么我就需要使用 .NET nanoFramework;如果选择了 Jetson Nano 或树莓派这些可以安装 Linux 系统的设备,那么我就需要使用 .NET IoT 库。
在购买硬件设备时,我一般使用微雪、海陵科,当然他们也有淘宝和京东的旗舰店,另外还有1688,这里有许多便宜的硬件设备,各种外围的硬件传感器,各种奇奇怪怪的模块,简直是让人眼花缭乱,可以帮助我们实现更多有趣的项目。
然而,真正的恐怖如斯还在后面!当你踏入立创商城的大门,便仿佛进入了一个全新的境界。这个商城主要售卖电子元器件,像电阻、电容、二极管、三极管等应有尽有。这些元器件不仅能帮助我们更好地理解电路原理,还能使我们的硬件设计如虎添翼。对于刚刚入门的你来说,这或许是未来的目标,但别急,江湖路远,慢慢来。在开源广场上,各路大佬的神级开源硬件项目比比皆是,你可以直接打板下单,分分钟进入大佬的世界,感受大佬那种软硬双休,画图焊板,无所不能的力量!
开源硬件平台说起买硬件,确实有些坑需要注意。硬件这个东西吧,买起来吧,就特别容易上瘾,是真便宜啊。但如果你不知道怎么用,那它们就会变成一堆废铁,所以在购买硬件设备时,一定要先了解清楚这个硬件设备的功能和使用方法,看好商家提供的相关资料和代码示例,最好能够找到一些相关的开源项目和教程,这样可以帮助我们更好地驾驭这些硬件设备。
买买买,盒子里全是再有就是可以通过官网的设备支持库来购买相应的设备型号,这样可以防止买到不支持的设备,还需要自己写驱动,最后写不出来,或者是写出来无法使用,不知道问题出在哪里,导致硬件吃灰。各位江湖新手,务必小心谨慎,莫要轻易掉入这些坑中!这一点特别是对于我们使用 .NET 进行 IoT 开发的朋友有用,这样可以节省大量的精力和时间,让我们更加专注于软件开发,提高开发效率。
学习 IoT,最重要的是实践。只有不断实践,才能更好地掌握 IoT 的基础知识和技能。在实践的过程中,我们会遇到各种各样的问题,这些问题会促使我们不断学习和进步。
6.1 学习的挑战当我们决定使用 .NET 开发 IOT 应用时,就走上了一条充满挑战的道路。.NET 面临的主要问题之一便是支持的库和资料较少,与主流开发方式:C/C++、Python、MicroPython 使用 Arduino、Thonny、ESP-IDF 等相比,.NET 的生态相对较弱。这就意味着我们需要更多地自己动手,更多地去探索和实践。这对于初学者来说,时常感到举步维艰。
dotnet当然,也不要过于担心,.NET IoT 库、.NET nanoFramework 的社区非常活跃,有非常多的优秀开发者贡献了大量的示例和设备驱动库,并在不断完善和更新。我们可以通过这些资源,更好地学习和应用 .NET IOT 技术。
6.2 破局之法在面对学习 IoT 的挑战时,我们可以采取一些策略,帮助我们更好地学习和应用 IoT 技术。以下是一些建议,供大家参考。
6.2.1 利用现有资源虽说 .NET 在 IoT 开发中资源匮乏,但这并非意味着我们对此束手无策。首先,要充分利用现有的 .NET IoT 资源,如官方文档、社区论坛、开源项目等。其中,官方文档堪称权威指南,能够为开发者提供全面且准确的技术说明与操作指引;活跃的社区论坛则汇聚了众多志同道合者,大家在这里分享经验、交流心得、探讨难题,形成了浓厚的技术交流氛围;而开源项目更是宝贵的代码宝库,开发者可从中借鉴成熟的架构设计与高效的代码实现逻辑。
此外,在我们所处的技术生态圈中,不乏.NET IoT 领域的先行者。在中文互联网这片广阔天地里,亦存在着大量优质的、围绕.NET IoT 展开的文章与教程。这些皆为不可多得的学习瑰宝。我们只需巧妙借助搜索引擎这一强大工具,便能精准定位并获取这些资源,进而有效助力我们对.NET IoT 技术展开更为深入的学习与更为灵活的应用 。
6.2.2 基础知识和不断实践当然,学习 IoT,还需要掌握一些基础知识,比如电路原理、传感器原理、通信协议等。这些知识可以帮助我们更好地理解 IoT 的工作原理,更好地应用 IoT 技术。
对于爱好者来说,还有一个挑战是,缺少专业的设备和工具,如示波器、逻辑分析仪等。这确实会增加一些难度,但这并不意味着我们无法完成精彩的项目。当遇到此类困境时,不妨转换思路,尝试选用其他同类设备。SPI 显示屏不行,换 I2C 的;ESP32 不行,就换树莓派。只要我们有足够的耐心和毅力,总能找到解决问题的方法。每一次的尝试与 “折腾”,都是我们积累经验、提升技术水平的宝贵契机,而这也恰恰是学习 IoT 过程中独特的乐趣与魅力所在。
6.2.3 借力打力跨界学习其实在 IOT 中最重要的是,硬件控制这一块。业务逻辑处理基本用什么代码都是一样的,所以对于一个新的硬件,我们可以先用 Arduino 或 MicroPython 实现各个模块的接入和控制,保正接线控制没有问题,再将其移植到 .NET 平台上。
毕竟,许多硬件模块提供的示例代码多为 C/C++ 或 Python。我们可以先按照这些示例代码操作一遍,然后再用 .NET 重写。这样做的好处是,可以验证板子、模块及其之间的通讯是否正常,以及接线是否正确,从而避免许多不必要的问题。
6.2.4 社区参与和贡献“孤举者难起,众行者易趋” 尽管单打独斗的开发者形象颇具魅力,但在开发中,团队协作的力量无可比拟。因此,强烈鼓励大家踊跃参与.NET IoT 社区。
在社区中,你可以通过多种方式发光发热。遇到技术难题时,大胆提问,就能借助集体智慧迅速找到解决方案;积累经验后,乐于分享,为后来者照亮前行的道路;技术成熟时,积极贡献代码,直接推动社区技术的进步。
通过社区参与,我们不仅能够结识志同道合的伙伴,还能够从他人的经验中汲取养分,不断提升自己的技术水平。同时,积极参与社区,也是对社区的一种回馈,让我们的技术更有价值,更有意义。
以下是一些活跃的社区和贡献途径,供大家参考:
•.NET IoT[3]•.NET nanoFramework[4]
社区对应的问题,可以在社区中提问,通过 Issue 报告问题,或是在 Discussions 中讨论。这些都是我们积极参与社区的方式,也可以帮助我们解决操作中遇到的问题。同时也可以帮助后面的人,让他们少走弯路。
当然,如果你有能力,不妨尝试为 .NET 平台开发一些常用的库和工具,贡献到开源社区中,帮助更多的开发者。这样不仅可以提升自己的技术水平,还可以为社区的发展做出贡献,实现技术的共享和传播。
在 IoT 领域,除软件与硬件,以及面包板和杜邦线外,一些辅助工具能极大提升开发效率与成果,助力我们在该领域如鱼得水。
7.1 3D 打印若想为电路板增添保护壳,或是快速创建产品原型,3D 打印无疑是上佳之选。利用 Windows 自带的 3D Builder 软件,可便捷设计各类外壳。完成设计后,将文件导出为 OBJ 格式,再借助切片软件进行处理,最后用 3D 打印机便可打印出成品。如此一来,既能有效保护电路板,又能迅速搭建产品原型,为开发工作带来诸多便利。
3D 打印当然,以上的 PLA 3D 打印和设计工具 3D Builder 只是一个入门级的选则,当然还有很多专业的设计工具,和其他更专业的外壳制作工艺,这里就不再赘述。
7.2 电烙铁在 IoT 的学习与实践中,焊接是一项不可或缺的技能。针对简单的焊接任务,如焊接导线,一把便携的小型锂电池电烙铁足以胜任。对于个人使用,建议使用环保无铅焊锡,这样既能保证焊接,又相对健康和对环境友好一些。不过需注意,焊接过程中务必关注安全问题,防止烫伤,并避免吸入有害烟雾。
电烙铁以上只是一些简单的初级入门工具,随着我们对硬件的深入了解,我们还会接触到更多的工具。
最后,在玩转 IoT 的过程中,还有几件事需要特别注意。正所谓“修炼有道,安全第一”,我们在动手实践时一定要确保自身和设备的安全。
接线时务必小心谨慎,特别是正负极的连接。接错了正负极,不仅可能烧毁设备,甚至会引发安全事故。裸板硬件没有保护壳,操作时更要小心,避免短路和静电损伤。这边特别提醒一下桌子凌乱的同学,小心杜邦线和 USB 线,如果不小心搭到载板上,你就自求多福吧。
所以说呢,实验环境也要尽量保持整洁和安全。避免在潮湿或易燃易爆的环境中操作,确保工作台干净整洁,远离易燃物品。使用电烙铁等工具时,一定要注意防护,避免烫伤。
还有一点,在调试和运行设备时,尽量避免长时间无人看管。别敲着代码接着板子,打开视频网站了。如果需要长时间运行,最好定期检查设备的状态,确保一切正常。
总之,安全是第一位的,只有在确保安全的前提下,我们才能尽情享受 IoT 开发的乐趣。愿各位在 IoT 的世界中,玩得开心,学得愉快,同时也能平安无事,顺利通关!
江湖路远,愿大家一路顺风,安全相伴!
江湖路远,修炼无止境。在 IoT 的世界里,我们既要面对挑战,也要享受乐趣。无论是选择开发平台,还是使用各种工具,每一步都充满了探索和发现的乐趣。虽然 .NET 在 IoT 开发中面临一些困境,但通过借力打力、跨界学习和社区互动,我们依然可以在这片广阔的江湖中闯出一片天地。
最后,祝各位学习 IoT 之路顺利,新年快乐,后会有期!
References[1].NET 官网的物联网部分:https://dotnet.microsoft.com/zh-cn/apps/iot?wt.mc_id=DT-MVP-5005195
[2]入门文档:https://learn.microsoft.com/zh-cn/dotnet/iot/?wt.mc_id=DT-MVP-5005195
[3].NET IoT:https://github.com/dotnet/iot?wt.mc_id=DT-MVP-5005195
[4].NET nanoFramework:https://github.com/nanoframework?wt.mc_id=DT-MVP-5005195
来源:opendotnet