设计与开发

单片机wifi 这才是工业物联网需要的WiFi单片机

小编 2024-11-23 设计与开发 23 0

这才是工业物联网需要的WiFi单片机

正如Microchip所看到的一样,随着物联网从家庭自动化领域拓展到如供暖、通风与空调(HVAC)、车库门和电风扇等家庭控制领域,以及在建筑和工业自动化领域的加速应用,市场对高度集成、可靠和安全的工业物联网(IIoT)连接性的需求前所未有地增加,这就催生了WiFi单片机的需求。

但Microchip无线解决方案部产品线经理Alex Li在日前的一场发布会中指出,以上应用目前正在使用的WiFi单片机方案功能是有限的,所以,几乎在任何场所都需要额外的主的单片机跟它一起工作。而要实现这样的设计,就需要两者之间通过SPI或者UART这样的接口协议进行连接。

然而这样的设计将诶开发者带来几方面的挑战:

首先,在Wi-Fi模块和主单片机之间的进行连接,限制了Wi-Fi的速度;

其次,从商业角度来说,这样的双元件结构会增加设计和生产过程中的一些复杂性和风险。 客户可能不得不花更多的时间在驱动程序的开发上,甚至还需要学习不同的软件开发工具。再者,来自不同生产商的供应也可能会导致一些生产延迟或者一些供应链上的风险,因为你不可能保证每个生产商都可以给你及时地供货。

第三,在系统及应用的技术支持方面也是一个问题。 因为你不可能让一个生产商的一个技术支持工程师,一个售前帮你解决如何连接另一个产品,以上种种这些都会导致你的产品延迟上市,还有一些无谓的资金的投入;

第四,则是网络安全方面的挑战。 如上图右边的主单片机,有很多和互联网连接相关的安全密钥和身份认证都会储存在其闪存里面,这将带来很大的安全漏洞。

为了解决以上问题,Microchip特意推出了首款Trust&Go Wi-Fi® 32位单片机模块WFI32E01PC。从Alex的介绍我们得知,这款单片拥有一款叫做PIC32MZ-W1的高性能32位单片机,它有1兆的闪存和256KB的RAM,可以应付很多复杂的物联网应用。

此外,Microchip这款产品拥有丰富的外设,这也让其能拥有足够的能力应付IIOT各种场景的应用需求。除了传统的SPI、UARD或者是ADC之类的外设外,Microchip还给客户提供了如以太网结构、USB、CVD Touch和CAN总线之类的特殊接口。与此同时,WFI32E01PC还有出色的模拟性能,如精确的高度线性的双通道12位ADC,那就意味着即使在不同的干扰、不同的温度变化下,产品仍然有相对稳定的性能。

“这样一种ADC的特性在设计工业传感器以及其他一些工业应用上是至关重要的”,Alex Li强调。

此外,作为一款面向物联网的芯片,数据安全也是Microchip这款WiFi单片机模块需要考虑的重点问题。而他们则通过在内部集成Trust&Go平台来解决,据了解,这个平台采用安全元件技术,为云身份验证进行预先配置和设置,简化了网络身份验证的过程。

Alex Li指出,Trust&Go就是为了解决设备连到本地WiFi,再连接到云端所的安全问题。按照他所说,在这个过程中,就需要有一个具有加密密钥对的增强型TLS连接,这个连接是一个非常复杂的过程,它需要三个要素:第一个就是不可变更的公共密钥,第二个就是一个隐性私密的密钥,任何外部的软件是不可以看到这个密钥的,这个是绝对保密的,而且必须防止一些物理的攻击。第三个就是唯一可验证以及可信任的设备标识,你可以理解成它就是一个外围设备的物联网设备的指纹或者是它的一些独特的设备标识。

除了上述描述的高性能硬件以外,Microchip还借助其MPLAB Harmony开发环境,为这款WiFi单片机提供了囊括开发、安全、功能性和可靠性在内的软件功能。

首先看开发方面,据Alex Li介绍,这个开发平台能为其客户提供无代码的Wi-Fi局域网开发框架,让某些不了解WiFi代码应用和设置的客户可以在其开发环境上通过填写一些简单的参数,做一些简单的选项,就可以设置好其WiFi连接;同时,Microchip还会给客户提供丰富的系统级师范应用,这样客户就可以通过很小的改动,将其变成自己的应用;此外,这个软件的SDK上面还会给客户提供所有MCU所需要的一些驱动,帮助客户运用各种MCU的功能。得益于这样的设置,开发者就能快设计出原因 ,并将其实现无缝集成。

其次看功能方面,如上图所示,Microchip的的软件库给客户提供了无线局域网具有的先进Wi-Fi功能和各种类型的网络协议栈。同时还将提供云连接的示例软件,满足不同场景下的设计需求。

来到安全和可靠方面。除了上文谈到的Trust&Go外,Microchip通过还为这款产品的软件引入了WPA3连接支持和连接硬件加密加速器TLS,提升了身份验证的稳定以及防止了一些离线的字典攻击。

借助卓越的Wi-Fi互操作性测试,Microchip可以保证其Wi-Fi产品可以随便地连接到任何的路由器,“Microchip已经跟53个市面上很受欢迎的路由器做过测试,并且涵盖了非常广范围的Wi-Fi的access point的芯片,旨在我们会帮助克服这个问题”,Alex Li强调。“同时,我们的Wi-Fi软件已经通过Wi-Fi Alliance提供的WFA认证,那就意味着客户如果想用其Wi-Fi logo,就需要通过WFA的认证”,Alex Li补充说。

Microchip还为客户提供了如ICD3、ICD4和SNAP之类的专业调试工具,针对射频产品,他们还将提供测试工具,确保其设计的产品符合规范。

“Microchip在不久之后将提供一个开发板,客户可以基于其快速搭建原型机”,Alex Li表示。

从上文的介绍我们看到,这是一个WiFi单片机模块,而不是集成度更高的WiFi SoC,因此在发布会上就有记者问到,公司为何做这样的设计选择?针对这个问题,Alex Li给出的答案是因为他们的模块已经经过了完整的射频认证,这就让客户使用起来可以更方便。但他也强调,Microchip有计划在未来推出针对SoC的设计。

作为全面的系统解决方案供应商,Microchip提供了广泛的产品组合,将WFI32E01PC模块与其他Microchip的领先器件配对,可简化物联网和工业物联网系统。这些领先的器件包括KSZ8081以太网PHY系列,MCP2542WFD CAN收发器系列,传感器和包括蓝牙®低功耗(BLE)、远程(LoRa)和IEEE® 802.15.4在内的无线技术等。Microchip的系统解决方案方法提供即时可用的软件驱动程序和硬件参考设计,能显著降低项目风险,缩短产品上市时间。

“有了我们这个模块,客户不再需要双元件的设计结构,不需要学习多个软件的SDK,只要学习我们的SDK就行了。此外,客户也不需要跟多个供应商打交道,Microchip可以从设计到生产给客户提供一站式的服务”,Alex Li最后说。

*免责声明:本文由作者原创。文章内容系作者个人观点,半导体行业观察转载仅为了传达一种不同的观点,不代表半导体行业观察对该观点赞同或支持,如果有任何异议,欢迎联系半导体行业观察。

今天是《半导体行业观察》为您分享的第2463期内容,欢迎关注。

晶圆|IP|SiC|并购|射频|台积电|Nvidia|苹果

玩转单片机!基于ESP8266模块的WIFI点阵时钟制作

用ESP8266模块制作的网络授时点阵时钟

美图镇楼

楼主是一名业余的单片机爱好者,做过许多各种各样的时钟,能看过眼去的都发在了本版,还蒙版主厚爱给过精华。可是至今也没有做出一个十分满意的“作品”来。因为做的每个时钟都有这样那样的缺点, DS1302并不太准确;DS3231要好一点但还是有误差(其实也够用了);GPS授时倒是准了,但是要拖一根GPS天线到室外,不够整洁。一直想DIY一个准确、简洁的时钟治愈我的“强迫症”,苦于一直没有找到好的方案。

在一个月黑风高的晚上我偶然地发现了物联网模块ESP8266,能连接WIFI,竟然还集成了32位的单片机,关键还是白菜价,简直就是神器啊!就想着用它来做一个从网络获取时间的时钟,这样只要有网络,时间就准确无误,再也不用纠结了。

1: 认识ESP8266

ESP8266是上海乐鑫(ESPRESSIF)生产的WI-FI低功耗芯片,是业内集成度最高的 Wi-Fi 芯片,封装尺寸仅为 5mm x 5mm。 ESP8266EX 高度集成了天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块,仅需很少的外围电路,可将所占 PCB 空间降到最低。ESP8266EX 内置 Tensilica L106 32 位微型控制器 (MCU),具有超低功耗和 16 位RSIC,时钟速度最高可达 160 MHz。支持实时操作系统 (RTOS),目前 Wi-Fi 协议栈只用了 20% 的 MIPS,其他均可用于用户编程和开发。ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了最低功耗。ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。(PS:这段是抄的)

当然了,只有芯片是没法玩的,网上有和外围电路一起封装好的模块。还有基于这些模块的开发板,板载USB转串口电路,只要用MicroUSB线(安卓手机数据线)连接电脑就可以调试了。方便好用价格也不贵。

Esp8266模块

Esp8266开发板

为便于理解,我们可以把ESP8266模块看作一个可以连接WIFI的单片机。但是要玩转这片小小的板子,却没有想像中那么简单。模块的编程和51单片机有很大的区别,需要从头开始学起,没有找到系统的教程,只好从网络上多如牛毛的信息中提取所需要的知识点,用蚂蚁啃骨头的精神,一点点攻克难关,终于实现了想要的功能。在这里分享一下个人的一些不成熟经验,有兴趣的同好可以参考一下。

2:流行的几种开发方式

AT指令:模块通过串口与上位机连接,上位机发出指令,模块收到指令后做出响应。可以用PC端的串口助手调试。当然也可以用另一片单片机做上位机,不过放着模块集成的32位MCU不用,再用51之类的8位单片机驱动的话就有点小马拉大车了。

NodeMCU:运行于ESP8266模块上的一种固件,该固件提供一些封装好的模块(API),直接调用就可以了。使用LUA语言编程。

Arduino:模块可以在Arduino环境下调试,有基础的同学可以使用此方式。本菜鸟没玩过Arduino,只是按教程简单试了一下,发现编译下载好慢。

几种方法都试了试,发现最适合自己的是NodeMCU。LUA语言与C有共通之处,很快就能适应了。还有现成的API,一些复杂的功能用几行代码就能实现。

3:刷NodeMCU固件

买来模块后需要刷入NodeMCU固件,NodeMCU的源代码发布在Github网站,但是要编译成可刷入模块的bin固件,需要在陌生的Linux环境下,没有Linux基础貌似玩不转。

好在像作者这样的菜鸟可以在线订制固件,打开http://nodemcu-build.com/,留下自己的Email,根据自己的需要选择相应的模块和版本。等会就收到订制好的固件了。

刷入固件用的工具从这里下载https://github.com/nodemcu,按住Flash键不放,把模块接入USB,选好COM口和要刷入的固件,速度不要选的太高,可能会刷入失败,用哪个波特率自己多试几次就好。

固件刷好后,就可以开心的玩了。开发软件个人建议使用Esplorer,此软件需要安装JAVA。试一下第一句程序:print(“Hello NodeMCU!”),模块正常的话会显示Hello NodeMCU!

试试node.restart(),重新启动一下模块,会显示当前固件的版本、生成时间、包含模块等信息。

最新的NODEMCU固件支持可变波特率,不再局限于9600bps。比如可以在Esplorer里把波特率改为57600。如下图:

至此开发环境搭建完毕,可以试着先把模块连接到家里的WIFI,网上有例程,把SSID和密码改成自己的,运行一下就能连接了。

4:从Internet获取时间

关于从网络获取标准时间,先试了试获取百度网站返回的HTTP头,里面包含当前的日期时间等数据,提取一下就好,但是有网友说这个时间也不是十分的准确。

后来发现NodeMCU包含SNTP模块,是专门干校准时间这活的。并且操作也非常的简单,就决定了采用这种方式。

SNTP简介:

SNTP,即简单网络时间协议(Simple Network Time Protocol),主要被用来同步因特网上计算机的时间。SNTP协议采用客户端/服务器的工作方式。SNTP服务器通过接收GPS信号或自带的原子钟作为系统的时间基准。SNTP客户端通过定期访问SNTP服务器获得准确的时间信息,用于调整客户端自身所在系统的时间,达到同步时间的目的。

上网找到国内常用的NTP服务器,用PC端的Ping命令简单的测试了一下,结果如下。

NodeMCU固件sntp模块用法很简单,本制作只使用其中的sntp.sync()函数。

语法:sntp.sync({ server1, server2, .. }, [callback], [errcallback], [autorepeat])。

各参数解释:

1. Server1,server2,..:指定要使用的一个或多个ntp服务器

2. Callback:同步成功回调,不需要在这里显式的调用rtctime.set(),该模块在内部自动执行此操作,以获得最佳的准确性。

3.Errcallback:失败回调,返回失败的原因。

1:DNS查找失败

2:内存分配失败

3:UDP发送失败

4:超时,不接收NTP响应

4. autorepeat:如果是非零值,那么每1000秒同步将发生一次,每次同步操作后都会调用回调。

找来例程试一下

sntp.sync("202.120.2.101",

function(sec, usec, server, info)

print('sync', sec, usec, server)

end,

function()

print('failed!')

end)

运行结果:sync 1497432519 920178 202.120.2.101

结果显示同步成功,并返回了1970/01/01到现在的UNIX时间戳和同步服务器。SNTP每次成功同步后会自动更新ESP8266模块的实时时钟,也就是自动调用rtctime.set()函数。所以要使用sntp授时需要rtctime模块的支持,定制固件时不要落下。需要说明的是,成功同步后会自动更新MCU内部的RTC。

当然那一大串UNIX时间戳我们人类是不太能看懂的,还要转为我们习惯使用的日期和时间,这就要用到rtctime模块中的rtctime.epoch2cal()函数,语法为rtctime.epoch2cal(timestamp)。函数成功运行后返回一个数组,数组包括:

year 1970年 ~ 2038年

mon 1 ~ 12月

day 1 ~ 31 日

hour 小时

min 分钟

sec 秒

yday 当前是一年中的第1 ~ 366天

wday 星期 (星期天是1)

例程:

tm = rtctime.epoch2cal(rtctime.get()) --获取当前日期时间并转换

print(string.format("%04d/%02d/%02d %02d:%02d:%02d",

tm["year"], tm["mon"], tm["day"],

tm["hour"], tm["min"], tm["sec"]))

运行结果:2017/07/08 09:48:04

5:显示标准时间

标准时间有了,下一步的工作就是怎样显示出来的问题,总不能开着电脑用串口助手看时间吧。家里用的话1602或12864液晶字太小,远了就看不清楚;数码管做的太多,都审美疲劳了;最后决定用点阵,但是ESP8266模块的GPIO太少,不够用来直驱点阵,为解决这个问题,特地从淘宝上淘了基于MAX7219的点阵模块,4个MAX7219驱动4片8*8点阵。使用SPI串口通讯,还可以多片级联,只要用3个GPIO就能驱动若干片8*8点阵。

MAX7219简介(来自百度百科)

MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。

第一次玩MAX7219,由于LUA语言用的不顺手,调试起来有点麻烦。先用熟悉的51来点亮点阵,调试通过后再一点一点地移植到ESP8266。买的点阵是32*8,即使用不美观的4*8字体,时分秒也无法全部显示,更不用说标准的5*8的字体了。最后决定只用3片点阵,使用5*8字体,只显示小时和分钟,但也不够用,折衷一下:0-19时用24小时制,20-23时用12小时制。

成功点亮后的点阵,私人订制的字体,还是很漂亮的。

6:开始制作:

硬件很简单,就是一个ESP8266模块, 5V转3.3V的电路和几个阻容。用洞洞板很快就搞定了。

用茶色亚克力做面板,可以增强点阵的可读性。插上电源,模块尝试连接WIFI,蓝色LED亮起,成功连接后该LED熄灭,稍等就会显示当前准确的时间了。如果WIFI断线,模块会尝试自动重连,LED会指示当前的WIFI连接状态。

在每次上电后自动同步时间,然后每隔一个小时与NTP服务器同步一下。这样只要有网络,本时钟显示的时间就是准确的。

功耗也不大,白天正常亮度,不到100ma。21:30后降低亮度,避免影响睡觉。

再来几张美图

7:后记

对于一个仅仅靠兴趣驱动的爱好者来说,做这么一个小玩意遇到的困难太多了,身边没有谁可以请教,只能在网上一点一点的找答案,好在还算是成功的实现了自己想要的功能。现在已经正常的运行了一个多月,时间与GPS几乎一秒不差。

不足的地方就是本时钟只能在一个WIFI环境下使用。其实NodeMCU也提供了通过浏览器设定模块的SSID和密码的功能,但试了几次发现不太稳定,再说换了WIFI只要简单的改改程序就好,也不算麻烦。决定不再折腾,能做到这样就很满意了。

-----官方NodeMCU文档,请移步http://nodemcu.readthedocs.io/en/master/en/

还有调试中的一张图,用液晶屏显示,一起发上来

谢谢观看!

浏览更多精彩内容请登录数码之家网站

技术交流请联系原作者

作者:qxgm

本文来源:数码之家

相关问答

手机是怎样通过 wifi 模块和 单片机 通信的呢?

手机通过Wifi模块和单片机通信的方式有直接连接通信、组成局域网、通过云服务器中转三种单片机一般是通过UART接口与Wifi模块连接,单片机可以给Wifi模块发送AT...

如何实现labview和 单片机 wifi 通信?

可通过以下步骤实现labview和单片机的wifi通信:1、labview搜索安装于上位机,单片机是下位机;2、上位机是电脑,下位机是单片机,两个设备都能够接入wifi无线...

如何实现 单片机 通过 WIFI 获取时间和天气数据?

如果是arm的开发板,很简单,能够直接实现获取互联网上的数据,编个程序提取网站上的信息就行(wifi的驱动如果已经有了最好,没有就要自己写驱动了……),,如果...

如何用 单片机 通过 wifi 模块发送大量数据给服务器?

单片机通过wifi模块发送数据给服务器,单片机需要有服务器的IP地址和接收数据的服务端口号,单片机通过wifi模块与服务器连接后(连接方法可以用TCP连接...

wifi 模块怎样与 单片机 连接?

使用wifi模块连接单片机的第一步是选择一款合适的wifi模块,其次是确定所需的通信接口,如UART、SPI或I2C。接下来,根据所用的接口将wifi模块与单片机进行连接...

单片机 WiFi 模块怎么做到连接校园WiFi、拨号连接、并放出WiFi热点?

1.目前市面上还没见到WiFi模块可以拨号上网的这个我目前见到的都是用无线账号密码连接热点,然后上网。另外也没见到有无线路由可以不接网线进行拨号连接的...

怎么实现手机APP与 单片机 之间的数据传递?

从提问中你得有如下知识:1.单片机编程能力;2.手机APP编程能力3.一种网络协议要想用手机APP接收到单片机的数据,简单一点的办法就是让单片机连入局域...从...

esp8266 wifi 模块连接 单片机 的哪个接口?

ESP8266WiFi模块可以通过串口(UART)连接到单片机。在使用ESP8266时,通常需要交替运行AT指令和数据传输两种模式。其中,用于发送AT指令和调试信息的串口为串...

C51 单片机 的中断操作,与直接在主函数内写入中断服务程序有什...

这是单片机的一种并行操作方式。第二个问题:因为P0口是漏极开路的。你去看看P0口的内部结构图,再用一点点的电路知识就能分析出来。有用(0)回复VKT_VKT首...

c51 单片机 ,往往所说的flash属于存储器吗?-ZOL问答

对于一些新型号的单片机,直接就可以在自己的程序中对flash进行读写操作,很方便。有用(0)回复tianzhe3ng现在的单片机都是用flasheeprom作为程序存储器的...

猜你喜欢