毛球大大

  • 2022-04-27
  • 发表了主题帖: 【IoT毕业设计】树莓派开发板+机智云IoT+监测机器人

    本帖最后由 毛球大大 于 2022-4-27 18:00 编辑 摘要:以小车为基底,以树莓派开发板为中心,搭载摄像头、传感器等数据采集设备,采用CC2530为传感器处理器、ZigBee技术为无线传输,实现了各节点间的通信。以ItChat微信机器人框架为基础,二次开发植入百度AI开放平台的语音技术、图灵机器人的中文环境对话技术和机智云技术,以达到使用微信客户端文本或语音输入控制与管理设备的效果,解决了家电设备之间的互联互控互通问题,同时具备一次性或周期性定时功能,使人们在享受舒适生活环境的同时实现节能。   前言   随着物联网技术的飞速发展,智能家居的理念已经深入人心。按键、红外遥控器等传统控制方式易受环境的影响,且不能实现远程控制[1]。若使用产品专用App进行控制,虽然高效便捷、灵活性高,但兼容性差,不同厂家的智能家电无法实现互联互通,不便于统一管理。     机智云开发者本次研究中设计了一个基于ItChat和树莓派的环境监测机器人。在硬件层面,机器人可以通过树莓派小车进行实时、可移动的环境监测;在软件层面,机器人可以根据环境监测数据,通过微信客户端灵活地控制各个设备[2]。该系统不仅能实现智能设备之间的互联互通,而且具有定时任务功能,可以根据工作需要进行定时设置,以达到节能效果。   1系统组成   树莓派机器人主要采用小车底盘作为基底,搭载树莓派作为ARM主控板,携带摄像头和WiFi模块实现视频通信,配备ZigBee协调器实现无线传感器节点的数据采集和传输,结合远程控制程序实现数据互通和远程控制[3]。系统整体框架如图1所示。   图1系统整体框架     远程控制端主要包括云服务、用户和网络端三大部分。   云服务:提供设备接入的服务器,App和终端所发送的数据都将通过服务器转发至设备,以实现用户设备之间的数据传输。   用户:包括App和微信客户端,用户可以通过App或微信客户端进行系统管理,如设备绑定、控制使用等。   网络端:一台路由器或AP分享网络连接的联网设备,终端通过联网设备接入到Internet中。   2硬件系统设计 2.1树莓派机器人硬件系统设计   本次研究以双层小车搭载树莓派B+作为主硬件系统,树莓派体积小,搭载使用方便,基于Linux系统开源的特性使其具有多元性。ARM主控板一方面实现了传感器节点模块之间的数据传输和汇集,另一方面还搭载了摄像头和电机驱动模块,利用L298N电机驱动电路控制小车运动,达到移动监控的目的,能够扩大数据采集的范围[4]。另外,在底板的前部和后部分别安装了超声波传感器,能够避免碰撞。     2.2传感器节点硬件系统设计   采用CC2530作为硬件系统的核心板,两层板的设计保证了ZigBee终端通信数据的准确性。该电路能在无遮挡的情况下,实现100m的有效传输距离,以满足系统需求。为了适应不同传感器的接口需求,系统参考arduino系列的管脚分布电路设计,适配常用的传感器,以提高系统的兼容性。同时,系统将CC2530引脚通过排线接出,以便后期灵活添加和调整[5]。   系统配置DHT11温湿度传感器、SW-420震动传感器、MQ-2烟雾气敏传感器和HC-SR501热释电红外传感器等采集家居环境参数,以便作出相应操作[6-7]。系统将CC2530的IO口通过排针的方式引出,以便后期扩展使用。     2.3输出控制系统硬件设计   基于传感器节点系统所采集的数据,系统可以通过输出照明设备或者排插开关控制设备。照明设备或者排插开关的功能单一,仅需操作GPIO,在GPIO上外接一个高电平驱动的继电器,用于控制设备。     2.4硬件系统整合 将上述各部分进行整合,每个部分主要通过GPIO接口和USB接口与ARM主控板连接。机器人硬件连接图如图2所示。     3软件系统设计 3.1微信框架ItChat设计 微信框架ItChat既可以捕获来自系统、好友和群聊的信息,又可以返回信息,能够实现信息交互。系统融入了机智云AIoT的设备控制技术、百度AI开放平台的语音技术和图灵机器人的中文对话技术等,搭建了一个简单的中文对话系统[8]。     微信框架ItChat设计流程如图3所示,导入所需的库,进行个性化的参数设置,扫描二维码启动微信,通过微信监听,等待有效信息并进行处理。 图3微信框架ItChat设计流程     3.1.1百度AI语音信息匹配技术 现在的手机基本都有语音助手,可以先将用户说的话转换为文本信息,再分析文本信息所表达的含义。使用ItChat将收到的语音消息下载并保存为MP3格式文件。由于百度AI的语音接口不支持MP3格式文件,所以使用Pydub库和FFmpeg对语音文件作WAV合成处理,最后将合成后的WAV格式文件提交至百度AI。若服务器成功识别语音文件,则返回识别结果;反之,则返回错误信息。若ItChat收到的是文本消息,则不进行以上处理。     当语音消息转换为文本消息后,可利用百度AI开放平台提供的Python的相关SDK进行信息匹配。信息匹配的方法包括利用字符串内建方法对简单文本信息进行检索、利用正则表达式对复杂文本信息进行匹配等。实现信息匹配后就可以进行定时开关的控制操作。     3.1.2调用平台API 机智云和图灵机器人仅提供RESTfulAPI风格调用接口,调用API时需要向服务器发送HTTP请求。Python有Urllib、Urllib2、Requests等网络通信库,既可以用来获取网站内容,又可以用来向Host提交数据。Requests库访问HTTP的方法有Get、Post、Put、Delete等[9]。     3.1.3设备联动、定时及远程控制   智能设备的远程控制、数据获取、设备绑定等基本功能和定时、联动等高级功能都是通过机智云的WebAPI实现的。WebAPI有丰富的功能接口,如用户管理、消息中心、绑定管理等。在开发过程中将它们封装成一个类,以简化代码,方便使用。     3.2照明设备软件设计 系统可使用机智云平台提供的自助式软硬件开发工具,即代码自动生成工具。只需在“.\app\user”文件夹目录下“user_main.c”文件里面的user_init()函数下添加外设初始化代码,将GPIO4设为输出模式。生成代码前,在数据点中添加一个名为“Switch”的数据点,机智云事件处理函数内的Switch语句就会有相应的开关事件,当设备收到来自App的数据后便会作出处理。     设置函数控制输出电平的高低,从而控制继电器的开关。修改代码后,将整个源代码在装好Tensilica相关GCC编译器的Linux环境下,利用“sudo./gen_misc.sh”编译生成二进制文件,再采用乐鑫官方下载软件将其烧写固件到ESP12-N中。     3.3网络传输模块程序设计   与Iw-Tools不同,Wpa_Supplicant软件支持WPA和WPA2加密,能够较好地保障通讯的安全性[10]。软件在ArchLinuxARM发行版上的安装步骤如下: (1) 运行“pacman-Sywpa_supplicant”进行软件安装。 (2) 运行“nano/etc/wpa_supplicant-wlan0.conf”配置文件。     当机器人与电脑或手机连接的不是同一个WiFi时,就会面临路由器穿透问题,因为机器人和主控端都在内网,没有公网地址。这时,必须经由路由器访问公网连接机器人网络中的路由器,再经由机器人网络中的路由器访问机器人。这种转发显然不能由安装在机器人或主控端上的软件直接完成,因此,需要考虑一种解决方案。     目前市场上的路由器多数使用的是UPnP技术,该技术允许内网向特定地址群发送一个广播包进行通讯,指示路由器为特定端口放行,即所有公网发往该端口的数据包都将转发给指示发起人,进而完成双端的直接连接。     虽然UPnP技术能够实现双端转发,但双方并不知道对方地址,无法直接建立连接。此时,需要公网上有一台服务器提供协商服务,可以使用Google开放平台提供的STUN服务[11]。     3.4视频传输程序设计   研究发现,当摄像头获取的图像静止时,单位时间内的差异非常小,即使有物体运动,背景图像通常也没有变化,因此,应在传输时只传送变化的部分以节省带宽。显然,对于需要适应工作环境的机器人而言,图像数据的传输应当是最低优先级且允许丢包,但H264压缩算法若丢失了关键帧(I帧),将导致P帧和B帧无法还原,且每次建立连接都需要再传输参数数据(如图像的尺寸、压缩算法、帧率等)。     基于以上分析,本次研究采用了常用于机器人的人脸识别或物体移动侦测的跨平台计算机视觉库OpenCV。OpenCV经由UVC获取摄像头图像,并采用OpenCV的Absdiff方法找寻其与上一帧的差异,将差异块传输至主控端进行覆盖还原。差异帧是节省带宽的关键,但考虑到丢包或拥挤时应出让带宽给控制指令和传感器数据,因此差异帧只存在2s,每隔2s传输一次完整图像,图像经由JPEG算法压缩。视频传输时序图如图4所示。     4系统测试 4.1传感器节点数据传输测试   为了保证数据采集的正确性,首先进行单个传感器的连接测试,然后将CC2530通过串口与计算机连接,调试、设置参数,观察PC机接受到的数据信息。基于系统的需求和功耗,将传感器的采集周期设定为5s,而对于震动传感器和红外传感器,一旦发生状态变化就立即发送数据。     图4视频传输时序图     4.2机器人移动及视频监控性能测试   利用ListView在客户端底部设计了小车移动、摄像头、采集节点、温湿度曲线图等4个图标,点击按钮即可打开相应功能并高亮显示。进入机器人移动控制界面时,实时视频采集功能便会同时开启,此时,通过方向按键可发出移动控制指令。机器人移动控制和视频传输演示图如图5所示。测试表明,客户端可以顺利控制机器人移动,视频传输正常。 图5机器人移动控制和视频传输演示图     4.3微信客户端的功能实现验证 4.3.1扫码绑定设备及配网   进入主界面后,点击“扫码绑定设备”按钮,系统开启摄像头扫描设备二维码,扫码完成后主界面就会出现该设备名称,此时的设备图标呈灰色状态,说明还未进行配网。点击“添加设备”,系统会要求输入WiFi密码,完成配网工作之后就会显示设备名称。点开设备的开关按钮,即可控制设备状态。扫码绑定设备界面如图6所示。 图6扫码绑定设备界面   4.3.2语音识别功能验证 打开微信客户端机器人,在聊天对话框中发送一条“打开照明”的语音信息。机器人将识别语音信息,并将信息返回给用户确认,若没有接收到错误信息,则机器人完成打开照明的操作,并发送“操作成功”。语音识别验证如图7所示。 图7语音识别验证   5结语 本次研究以ARM嵌入式技术为基础,设计了一个可移动的监测机器人。从最初的芯片选择、传感器配置、网络连接和客户端设计都是根据需求灵活定制的,以确保性能最优化。通过测试可知,机器人工作性能稳定,能够在灵活监测、采集环境数据的同时与树莓派和客户端很好地进行数据传输。   传感器工作正常,客户端方便易懂,若投入使用将会有很好的社会应用价值。智能机器人的发展空间巨大,未来可以考虑添加位置记忆的功能,结合自动寻路算法来完成路线绘制,并用于自动充电,以解决续航问题,还可以搭载更多的传感器,使系统更加智能化。

  • 发表了日志: 【IoT毕业设计】树莓派开发板+机智云IoT+监测机器人

  • 2022-04-19
  • 发表了主题帖: 【物联网开发笔记】机智云设备移植RT-Thread

    本帖最后由 毛球大大 于 2022-4-19 18:33 编辑 开发环境: Keil版本:V5.30   RT-Thread版本:3.1.5   STM32cubeMX:V6.0.1   开发板MCU:STM32F103     机智云平台生成的应用代码是裸机版本的,而在实际应用过程中,通常会有多个功能,这个时候就需要用到实时系统,比如FreeRTOS, AzureRTOS ThreadX, RT-Thread等,笔者这里推荐RT-thread。   RT-Thread是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。适用于家电、消费电子、医疗设备、工控等领域大量使用的 32 位 ARM 入门级 MCU 的场合。   RT-Thread Nano 以软件包的方式集成在 Keil MDK 与 CubeMX 中,可以直接在软件中下载 Nano 软件包获取源码,关于RT-Thread Nano移植详情请参看笔者文章: Keil版本:https://bruceou.blog.csdn.net/article/details/109549430 STM32cubeMX版本:https://bruceou.blog.csdn.net/article/details/109607302 3.1 Nano Pack 安装   进入打开 CubeMX,从菜单栏help 进入 Manage embeddedsoftware packages 界面,点击 From Url 按钮,进入 User DefinedPacks Manager 界面,其次点击 new,填入上述网址,然后点击 check,如下图所示:         check 通过后,点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。       回到 Manage embedded softwarepackages 界面,就会发现 RT-Thread Nano 3.1.5软件包,选择该软件包,点击 InstallNow,安装之后,弹出 Licensing Agreement ,同意协议,然后点击 Finish,等待安装完成,成功安装后,版本前面的小蓝色框变成填充的黄绿色,如下图所示:   至此,RT-Thread Nano 软件包安装完毕,退出 Manage embeddedsoftware packages 界面。 3.2添加 RT-Thread Nano 到工程 打开基础工程,点击 SelectSoftwares,选择Select Components界面,在 Pack Vendor 中选择 RealThread, 然后根据需求选择 RT-Thread 组件(此处只移植 Nano,只选择 kernel 即可),然后点击 OK 按钮,如下图所示:     选择组件之后,对组件参数进行配置。在工程界面 Pinout&Configuration 中,进入所选组件参数配置区,按照下图进行配置。     由于HardFault_Handler()和SysTick_Handler() 中断服务例程在RT-Thread的 board.c 中重新实现,做了系统 OS Tick,所以还需要删除工程里中原本已经实现的HardFault_Handler()和 SysTick_Handler() ,避免在编译时产生重复定义。如果此时对工程进行编译,没有出现函数重复定义的错误,则不用做修改。       最后保存生成工程即可。   成功编译后下载到MCU即可。   关于线程的创建与使用可以参看笔者文章: RT-Thread Nano 线程讲解:https://bruceou.blog.csdn.net/article/details/112157693   最后的效果就不在演示了,和上一章是一样的,到这里,机智云设备端基本玩的差不多,后面就可以使用所学知识做一些项目开发了。  

  • 2022-04-08
  • 发表了主题帖: 【IoT毕业设计】STM32开发板+机智云IoT+实现智能空调控制

    摘要: 为了解决空调耗电量大,管理不当将浪费大量电能的问题,达到节约电能的目的,文章设计了基于物联网云平台的空调智能控制系统,整个系统分为手机APP客户端、机智云物联网平台及基于STM32的智能空调控制终端三大部分;智能空调控制终端模块实时采集周边环境的温湿度数据,经过STM32单片机对数据进行处理,再通过esp8266WIFI模块发送到手机端,用户也可以在手机APP 端改变相关设置,再由手机端发送到云平台,最后由云平台通过WIFI网络发送给ESP8266WIFI模块实现远程控制空调的功能;   实验结果表明,利用该系统能实时监控环境温湿度数据,有效地控制空调合理使用,控制成功率达到100%,能营造舒适的生活工作环境又不造成浪费,适用于多种空调品牌,具有较高的实用价值。   引言   家用智能空调是智能家居中重要的组成部分,智能家居是在物联网这一大背景下提出来的。家庭中经常使用的设备如:网络电视、电风扇、地暖、空调、冰箱、微波炉、智能电灯等通过物联网技术组合到一起并连接网络,构成人们经常提及的智能家居。智能家居集开关控制、手机远程控制、室内外远程遥控、防盗报警、室内外环境监测、红外转发以及未来可编程开发拓展等多种功能于一体。与传统家居相比,智能家居不仅具有过去设备的全部功能,还扩展了家居设备自动化和信息化的优势,为使用者提供全方位与设备进行信息交互功能,同时也降低了诸多能源的消耗[1-3]。     然而由于各种物联网设备千差万别,使用的通讯协议不尽相同,常用的通讯方式有串口、WIFI、3G、4G、并口等,导致物联网应用开发异常复杂,使用的编程语言和技术纷繁多样,导致应用难以实现传统软件所具有的可维护性和可伸缩性,同时难以自动传输设备的监测数据以及传递执行动作,所以简化物联网应用开发的关键技术势在必行。   家用智能空调控制系统在智能家居物联网背景下应运而生,目前大部分旧时的普通家居还使用红外遥控器通过发送信号对空调进行控制,但许多家庭面临遥控器过多、遥控器失灵,以及找不到遥控器等问题,造成了许多的烦恼,随着科技的发展,针对这类问题某些厂家发明了红外线发射器,只要将红外线发射器插在手机上就能控制家电,但此类产品还存在着明显的局限性,控制距离过短的问题显得尤为突出,再加上需要随时带在身边显得尤为麻烦[4]。     目前家电市场上已有不少推出智能型空调的公司产品[5],实现原理一般以单片机为控制芯片,内置无线通信模块(如WIFI)与控制平台通信。这样的方式须内置无线通信模块,仅供新生产的新型号空调,不能控制老型号普通版空调。     针对以上红外线空调智能控制距离短、新型空调成本高、物联网技术等原因,本文提出一种方法来实现以手机APP为客户端,通过网络连接云平台进行虚拟服务虚拟设备和外置智能空调控制终端,可以实现对普通空调的远程控制。本文的空调智能控制系统基于STM32主控中心、WIFI技术和机智云平台而设计的,关键技术是采用FlyMcu软件用Keil MDK5编程实现机智云平台的SDK和API服务,实现三部分的通信连接,将新的服务器平台应用于物联网的应用开发,简化了物联网应用开发的复杂性,加快了物联网应用的开发效率,提高了应用的可维护性、可升级性和可扩展性。     1 系统结构及原理   根据对智能控制系统的总体功能分析,将系统分为以下几个部分进行模块化设计,首先是温湿度数据采集模块,接着是按键控制显示模块,最后是WIFI网络通讯模块。温湿度数据采集模块采集当前环境数据信息,发送给中央处理器,处理器对信息进行读取,再发送给液晶显示模块显示。按键分别控制空调的温度、风速和模式,当按键按下处理器收到信号时进行信号识别,接着把信息发给液晶显示模块显示。当单片机接收到数据信息时,单片机也会将数据信息通过WIFI网络发送给机智云平台,机智云平台再将数据信息发送给手机APP。系统整体框图如图1所示。     图1 系统整体框图   机智云Aiot开发平台是个人或企业开发者的一站式智能硬件开发及云服务平台。平台提供了定义产品、应用开发、硬件设备的开发调试、云端开发、运营管理、数据服务、产品测试等覆盖智能硬件接入到运营管理全生命周期服务的能力。机智云物联网平台为开发者提供了许多帮助,其中以自助式开发工具和开放的云平台对于开发者而言帮助最大。开发者开发硬件联网时,常常止步于相关应用程序的开发,因此硬件联网在这之前只有部分技术经验特别丰富的技术人员才能开发。     机智云针对这类问题为开发者提供了完善的SDK与API服务,开发者只需下载下来直接使用即可,这不但大大降低了开发者的技术门槛,而且大大缩短了研发周期,减少了开发者花费在软件开发等方面的精力,为今后的硬件智能化升级提供了许多宝贵精力[6-8]。     机智云开发者平台为开发者提供了固件包,分为GAgent和MCU两部分,其中MCU部分是直接与硬件设备通信的,也就是说,我们通过对MCU内部烧入代码,通过相应的程序编程,实现对硬件的控制;然而GAgent相当于机智云提供给我们WIFI模块的固件包,它的作用分为两方面,一方面为一些硬件模块提供配置入网功能或者是绑定手机功能,另一方面为手机控制硬件或者云端与硬件信息交互提供帮助。     机智云为用户提供丰富的云服务功能,开发者可以在机智云服务平台上注册用户和登录、注册设备和注销、绑定设备和解绑等。机智云上的配置文件服务器可以为开发的设备提供数据点定义和配置,当硬件设备发送二进制数据时,SDK与云服务可以通过数据配置文件解码,通过这种方式对上传来的数据就行解析,当云端下发相应的数据点键值对时,SDK与云服务通过数据配置文件编码成二进制数据,然后将二进制数据传输到设备上,再由设备内部处理,以此达到对设备控制的效果[9-12]。     2 物联网云平台的空调智能控制硬件设计 2.1 硬件电路设计 2.1.1 单片机最小系统   目前市面上的单片机有很多种,比如最常见的8051单片机、STM32单片机、TMS单片机、MSP430系列单片机等,51单片机和STM32单片机作为大学最常用的两款单片机,本作品采用STM32单片机作为主控芯片,它具有高性能、丰富合理的外设、低功耗等优势,除了自身优势外,它还拥有强大的软件支持,即丰富的软件包,具备全面丰富的技术文档,还积累了大批的用户群体[13-14]。     本文选用STM32F103C8T6最小系统板,该系统板作为本套设计的中央处理器,通过PB9端口接收来自DHT11温湿度检测模块的检测数据。单片机I/O模拟SPI连接方式,由PB5~PB8接到OLED液晶显示的模块引脚上。将PA2、PA3与ESP8266WIFI模块的RX、TX端口相连,实现数据互通。按键开关直接连接最小系统板的PB11~PB14端口,单片机接受到低电平信号针对内部数据进行处理。   2.1.2 按键电路     OLED又称为有机发光半导体,因其具备发光效率高、亮度高等特性,广泛用于MP3、智能手表、智能车摄像头图像实时显示、电池管理仪、工控手柄、便携医疗仪等产品。OLED引脚定义如表所示。OLED的GND管脚一般直接连接电源地,VCC管脚接电源模块的3.3 V电源端口,SCL管脚接STM32单片机的CLK时钟端口,SDA管脚接MOSI数据端口,RST管脚一般接单片机的复位端口,D/C管脚一般用来接收单片机传输来的数据或命令,从SCL管脚到D/C管脚都是高电平有效,OLED液晶显示电路图如图2所示。     OLED模块的分辨率为128*64,通过编程显示16*16点阵以供使用,模块采用SPI接口方式,通过研究GPIO模拟SPI的时序图,不难发现,模拟SPI通信协议其实是向内部的SSD1306芯片写入一个字节信号,这一个字节中包含了命令和数据信息,通过编程,只能向OLED模块内部写入数据不支持读取数据功能,因此只需要写SPI发送给OLED。     图2 OLED 液晶显示电路   2.1.4 温湿度检测   DHT11数字传感器是一款温湿度复合传感器,它是基于高性能的温湿度感应元件制作而成的,其内部包括一个电容式感湿元件和一个高精度集成的测温元件,并与一个高性能8位的单片机相连接。该传感器的数字信号已校准,无需使用者担心,该产品温湿度的测量精度得到用户的认可,因此其常应用在检测设备、记录器、医疗产品之中。     DHT11传感器既能测量温度,也能测量湿度,因此它的数据准确度不如一些用于测量单一数据信息的传感器,与它们比较温湿度测量结果精确度要小很多。DHT11数字温湿度传感器工作电压为3.3~5 V之间,数据端口也带有上拉电阻,该模块设有固定的螺丝孔,方便用户的连接,1号引脚是数据管脚和STM32的I/O口相连,2号引脚接电源模块的3.3 V电源,3号引脚接地。引脚接线电路图如图3所示。     图3 DHT11引脚接线电路     DHT11温湿度传感器作为采集模块,使用方法为:首先总线下拉电平18 ms, 接着总线由上拉电阻拉高电平,并且传感器设定延时30μs, 其次判断已连接的STM32单片机GPIO口是否有相应的低电平响应,响应后80μs STM32的GPIO口再发出高电平。当有高电平发出,80μs后传感器进入数据采集状态和校验阶段。   2.1.5 通信模块   本系统采用WIFI模块来实现硬件与手机APP通信,当前市面上有很多不错的WIFI模块产品,最后决定选取ESP8266开发板。之所以选用ESP8266 WIFI开发板主要是因为该开发板的主模块是ESP-12F,串口芯片型号是CP2102,最重要的原因是支持NodeMCU Lua开发方式,虽然本设计尚未用到该开发方式,但如果使用该开发方式可以不再使用STM32核心处理器,直接通过该开发板D1引脚接OLED液晶屏SDA引脚,D2引脚接OLED液晶屏SCL引脚,3 V接3.3伏电源,GND接电源地。因此选用该开发板为以后硬件升级奠定一定基础[15]。     ESP-12F是由安信可科技开发的,该模块核心处理器ESP8266在较小尺寸封装中集成了业界领先的Tensilica L106超低功耗32位微型MCU,带有16位精简模式,ESP-12F是ESP-12的增强版,无论是工艺上还是**电路上,相比于上一代都展现了极大进步,在稳定性与抗干扰性方面,都表现极佳,PCB天线经过了专业实验室的测试,也得到了ROHS的认证,ESP-12F在原先基础上又新增了6个IO口,SPI口引出,对于开发者而言,开发也更加便捷,它一方面可以直接通过IO口与STM32单片机进行交流。     另一方面通信工作方式分为STA模式、AP模式和 STA+AP模式,并且内部包含了TCP/IP协议,由此实现了云平台通过WIFI网络和串口之间的数据传输[16-18]。     本设计是在机智云平台基础上设计的,在选择好相应的几个功能后,机智云平台会自动生成相应的SDK,因此无需关注其内部协议处理问题,这对开发起到极大的便捷性,WIFI模块的开发设计主要包括配置处理、数据上报、数据下发,其他的软件程序都由机智云平台自动生成,结合软件开发手册调用即可。     本设计直接使用ESP8266 WIFI模块开发板,该开发板的原理图如图4所示,鉴于系统以STM32作为核心处理器,因此本模块只需用到RX端口和TX端口,其余端口留有今后升级使用。将WIFI模块开发板的3V3和GND引脚分别接到电源模块的3.3 V电源端和接地端,RX引脚和TX引脚分别接STM32开发板的PA2引脚和PA3引脚,通过这两个引脚实现信息相互传输。     图4 WIFI 模块电路   2.2 软件设计   控制工作流程如图5所示,空调设备供电后,控制器通过无线网络连接远程服务器机智云平台,手机APP操作向服务器发送设备惟一识别码和状态信息,云平台接收到信息后,进行数据分析处理,并查询该设备对应的数据信息编码指令,WIFI模块在配置处理中有两种接入模式,分别是SoftAP模式和AiriLink模式,当通过程序设定使WIFI模块处于AiriLink模式时,WIFI模从会通过WTFI网络连续地接收特定编码的WIFI广播包,当手机连接已联网的WIFI网络时,手机会自动广播,广播的是内容是由手机APP(如Demo APP)发送内部编码后的WIFI网络SSID和密码。     WIFI模块接收到广播的内容后,自动尝试连接对应的WIFI网络,当显示连接成功时,相应对的配置也就完成了、当WIFI模块处于AP模式下时,WIFI模块自身就相当于一个热点,可以通过手机的机智云APP直接与WIFI模块连接,通过内部数据信息处理,手机APP会将可用的WIFI网络SSID以及密码发送给WIFI模块,当WIFI模块接收到手机发来的配置信息届会自动不断尝试连接相应的路由器,当WIFI模块显示连接成功时,该设备会自动跳转到正常工作模式。若有发回指令给控制器,控制器接收到指令,通过手机APP,完成对空调设备的控制。     图5 控制工程流程图     2.2.1 STM32驱动设计 2.2.1.1 时钟初始化     系统时钟初始化采用系统滴答定时器,函数中RCC-0scInitTypeDef为结构体函数,结构体中包含了是时钟来源,RCC-ClkInitTypeDef函数以结构体的形式定义了总线的时钟的配置,总线时钟一般选择的是内部使能系统时钟,本程序中是使用外部时钟源HSE的8 MHz晶振,通过代码运算实现9倍频,达到72 MHz系统主时钟。     APB1总我时钟通过分频实现36 MHz, 然而APB2和AHB都为72 MHz: 该模块中实现了1 ms延时,是通过HAL-RCC-GetHCLKFreq()/1 000赋值,以此来使系统达到1 ms的中断,接着通过定义HAL_SYSTICK_Config内部形参为1 ms。以此实现系统滴答定时器的初始化配置。   2.2.1.2 串口模块初始化   STM32程序的串行通信中,程度必须包含串口初始化程序,首先要设定其波特率,只有相同波特率,才能实现相互通信,波特率相同每秒中传输的数据位数也就相同,数据传输是以一个字符接着一个字符的顺序传输的,一个字符的传输是由起始位开始,停止位结束,当系统判断了起始位和停止位,表明一个字符传输成功。下方的串口初始化程序表示,USART1选择异步通信方式,接着设定相应的波特率为115 200 Bits/s, 并且设定8 Bit数据长度。   2.2.1.3 按键模块初始化 按键初始化函数是keyInit (),该函数定义了2个按键相应的I/0口,通过读取函数的输入值,进行程序判断,对于按键1和按键2需识别是长按还是短按。   2.2.2 OLED液晶显示模块程序设计   按键初始化函数是keyInit (),该函数定义了2个按键相应的I/0口,通过读取函数的输入值,进行程序判断,对于按键1和按键2需识别是长按还是短按。   2.2.2 OLED液晶显示模块程序设计   OLED模块的分辨率为128*64,通过编程显示16*16点阵以供本系统使用,模块采用SPI接口方式,通过研究GPIO模拟SPI的时序图,不难发现,模拟SPI通信协议其实是向内部的SSD1306芯片写入一个字节信号,这一个字节中包含了命令和数据信息,通过编程,只能向OLED模块内部写入数据不支持读取数据功能,因此只需写SPI发送给OLED即可。     2.2.3 数据采集模块程序设计   DHT11温湿度传感器作为采集模块使用,本课题研究了其相应的工作原理,而总结出一般的软件流程为:首先总线下拉电平18 ms, 接着总线由上拉电阻拉高电平,并且传感器设定延时30 μs其次判断已连接的STM32单片机GPIO口是否有相应的低电平响应,如果有响应,响应后80 lusTY32的GPIO口再发出高电平。当有高电平发出,80 μs后传感器进入数据采集状态。   2.2.4 WIFI程序模块设计   WIFI模块在配置处理中有两种接入模式,分别是SoftAP模式和AirLink模式,当通过程序使WIFI模块处于 Airlink模式时,WIFI模块会通过WIFI网络连续地接收特定编码的WIFI广播包,当手机连接已联网的WIFI网络时,手机会自动广播,广播的是内容是由手机APP(如 Demo APP)发送内部码后的WIFI网络SSID和密码,WIFI模块接收到广播的内容后,自动尝试连接对应的WIFI网络,当显示连接成功时,相应对的配置也就完成了。     当WIFI模块处于APP模式下时,WIFI模块自身就相当于一个热点,我们可以通过手机的机智云APP直接与WIFI模块连接,通过内部数据信息处理,手机APP会将可用的WIFI网络SSD以及密码发送给WIFI模块,当WIFI模块接收到手机发来的配置信息后会自动不断尝试连接相应的路由器,当WIFI模块显示连接成功时,该设备会自动跳转到正常工作模式。     2.2.5 STM32软件编程   STM32作为本设计的核心枢纽,无论是直接控制空调的几种设定还是将数据显示到手机上都要经过STM32不断检测有无信号输入,当STM32检测到对应的按键串口有低电平输入时,STM32内部处理发送给OLED模块显示。当系统接通电源时,STM32不断向温湿度传感器发送检测信号,由STM32处理发送给OLED显示和通过WIFI模块发送给机智云平台,再经过机智云IoT开发平台发送给用户手机APP。     控制工程流程如图5所示,远程管理与数据分析系统功能流程如图6所示。首先用手机APP提前设置好空调相关参数,然后启用设备数据分析功能,该功能可以实时存储的空调各状态数据并保存,同时与提前设置好的空调状态变量进行比较分析,判断空调状态是否开启或者是关闭,根据需要生成控制指令来调节空调的温度,根据需要生成报警信息并发送到控制器,同时通知给管理员。同时,根据整个控制过程中记录的设备状态信息来综合分析空调运行情况等信息,了解系统在节能控制方面的效益。       图6 远程管理与数据分析流程图     为了实现真正的远程控制,选择将实物硬件系统接入物联网云平台。在云平台注册一个开发者账号,注册完成后可以开始创建新任务。第一步,先创建智能空调的基本信息。     第二步,创建本系统功能所需的数据点。 第三步,下载生成的APP源码(可以自行对源码进行更改),生成APP。     3 系统安装及调试结果 3.1 硬件使用说明 1)连接电源; 2)若此前WIFI模块已入网,在电源接通后,WIFI模块会自动入网,整个系统处于工作状态。若此前未连接WIFI,此时只需在手机端对WIFI模块进行配网即可。     3.2 软件使用说明   1) 用云平台生成的APP源代码在AndroidStudio中生成机智云示例APP,在安卓手机上安装APP。 2) 进入APP点击一键配置——>输入自己的WIFI名称和密码——>选择WIFI模块的型号——>根据提示按配网按键——>等待配网成功——>配网成功后会显示设备在线,过程附图如下:①一键配置;②输入WIFI密码;③选择WIFI模块型号;④搜索连接设备;⑤配网成功;⑥设备控制界面。(顺序从左到右,从上到下)     连接成功后,可以对空调进行远程控制,远程开启和关闭空调,远程监测家中环境温湿度,远程选择空调的模式,远程设定空调温度;除此之外,空调有智能控制模式,当温度超过设定的阈值,空调可以自动开启进行制冷或制热;空调还保留手动控制模式,可以通过按键控制空调的各参数和模式。     3.3 测试   在系统测试时,选择了模拟空调电路作为测试对象,同时手机打开机智云APP,家用空调智能控制系统设计包括对空调的模式、风速和温度的控制,环境温湿度也同时在OLED屏幕上显示,智能家居控制系统可分为硬件控制系统与远程控制系统两方面。在进行实验调试之前,需要将软件平台keil MDK5安装好,keil MDK5用于编写和调试代码,并将代码烧录到STM32最小系统板上,在keil MDK5中编写好代码,并且选择好器件STM32F103C8,最终检查编译成功结束。具体步骤如下。     步骤1:基于keil 软件与面包板搭建的临时电路,根据基本要求实现测试;   步骤2:先安上元件后,焊接电路,用万用表测试电路是否正确连通,以确定无虚焊、漏焊和焊接错误等问题,然后将集成芯片安上。以此可以防止集成芯片由于电压过大而烧坏;   步骤3:检查连接无误后,装载程序,调试,运行;   图7 系统界面图     首先进行硬件系统操控:当按下红色按钮时,模式可以改变;当按下绿色按钮时,风速可以改变;当按下蓝色按钮时,可以调高温度;当按下黄色按钮时,可以调低温度。     其次进行远程操控:当选择模式一栏时,可以选择自己想设定的模式,显示屏也能够显示,当选择风速一栏时,可以选择自己想设定的风速,显示屏会将于手机设定的风速显示出来,当拉动温度条时,显示屏可以根据设定值,将温度显示出来,手机机界面还会实时显示环境温湿度的变化。     首先通过程序获取空调遥控器编码进行分析,其组成按编码模式为:表1模式编码,分别对5种工作模式自动、制冷、加湿、送风、制热进行编码,表2为风速模式,分别对自动、一级、二级、三级进行编码,表3为温度编码,分别对温度范围进行编码。   校验码=[(模式-1)+(温度-16)+5+左右扫风],将十六进制数转换成二进制数保留后4位,再逆序取值;校验码生成后根据通过程序进行编码,编码的不同可以需求控制空调的各种运行状态,来调节室内的温湿度,达到人体舒适状态。     表1 模式编码   表2 风速编码   表3 温度编码     表4为系统测试运行状态数据表。其中有进口温度、出口温度、人员状态、状态、时间分别表示进风口温度,出风口温度,人体感应器返回数据、空调的运行状态,运行时间。人员状态有两种表示方法,0表示无人,1表示有人。空调运行状态有两种,H表示制热状态,C表示制冷状态。当室内长时间处于无人状态的时长可以由时间表示(单位:分钟)。一般预设时间15min, 当室内无人超过此时间后,系统则发出报警信息,并自动关闭空调。实验结果表明,智能空调控制系统能实时采集周边环境的温湿度数据,服务器可以正常接收到传送的状态信息,用户通过云平台系统控制发出的信息编码可以实现对空调的控制,运行较稳定,控制成功率达到100%。     表4 系统测试运行数据   4 结束语   本文实现了基于物联网云平台的空调智能控制,智能空调控制终端模块实时采集周边环境的温湿度数据,以STM32单片机作为硬件控制中心结合WIFI技术,云平台与家用空调连接来进行远程操控。手机可以实时显示的房间温湿度,在炎热的夏季或寒冷的冬季,可以在回家之前就通过手机APP调节空调,这样一到家就能平复焦躁的内心,不用再焦急地等待房间温度降下来,更不用再困扰于找不到遥控器或是遥控器没电的烦恼,甚至不用再担心出门上班后家里的空调忘记关了的情况。     利用该系统能实时监控环境温湿度数据,有效地控制空调合理使用,控制成功率达到100%,能营造舒适的生活工作环境又不造成浪费,适用于多种空调品牌,具有较高的实用价值。同时,本设计关键技术是采用FlyMcu软件用Keil MDK5编程实现机智云平台的SDK和API服务,实现三部分的通信连接,将新的服务器平台应用于物联网的应用开发,简化了物联网应用开发的复杂性,加快了物联网应用的开发效率,提高了应用的可维护性、可升级性和可扩展性。     对于未来发展而言,首先智能控制系统是需要进行不断完善的,随着各种家用空调的发售,它可以与更多空调设备相关联,进而满足更多使用者的不同需求。人们使用WIFI技术既帮助人们不再烦恼于复杂的布线,又帮助人们节约了布线空间[19-20]。

  • 2022-04-06
  • 发表了主题帖: ESP8266-01S接入机智云物联网平台

    接入机智云物联网平台,首先需要烧写机智云的固件,官网就有免费下载直接使用! 下载对应固件包   ESP8266-01s模块进入烧录模式连接图 GPIO0用于固件烧写模式,低电平为烧写模式,高电平为运行模式(默认状态) ESP8266-01S      USB-TTL串口 3v3---------------3v3 GND--------------GND TX----------------RX RX----------------TX RST---------------3V3 EN----------------3V3 GPIO0-------------GND   GPIO0烧录模式要接地 正常模式悬空 GPIO2悬空即可   打开烧录软件       选择固件包  ESP8266-01S  8M flash 选择对应包 因为是MCU开发 所以DoNotChgBIN要打勾   还有一个是模式选择SPI MODE     ESP8266-01S 我们是使用的为安信可的牌子 这里选择QIO打勾或者DOUT都行,(已经测试过) 别的按照图上配置,然后点击START,开始下载   下载完成   下载完成后将GPIO0连接的GND拔掉进入正常模式,然后关闭刷固件软件,进行网络配置 1.  WIFI配置网络   机智云网站下载串口调试助手           下载完毕后双击exe文件进入应用 按照顺序操作   上面的key与secret是在机智云官网创建的个人项目里面的   第一次配网需要先进入SoftAP模式,然后连接成功后模块自动进入Airlink模式。千万不能第一次就直接进入Airlink模式,否则一直都是"配置超时(别人说的)   手机连接ESP8266的无线(名称:XPG-GAgent-xxxx;密码:123456789)   进入App——一键配网——输入家里路由器的名称和密码 路由器要使用2.4GHz     型号选择乐鑫   然后进行一键配置     第一次会连接失败进入下面这个页面,然后点击已完成上述操作,选择发现的设备,第二次连接就可以成功。       最后进入配置成功页面   GAgent协议 GAgent主要的作用是数据转发,是设备数据、机智云、应用端(APP)的数据交互桥梁。可将GAgent移植到WiFi模组、GPRS模组、PC端等。     我们就是将ESP8266-01S刷入的是这个GAgent固件   配置入网配置入网:使设备连接路由器,主要有3种配网方式airkiss(微信)、Airlink、SoftAP。(1) Airlink模式:设备当处于该模式下,会不断接收特定编码的WIFI广播包,手机连接可用的WIFI网络后,通过指定的App发送编码后的WIFI网络的SSID和密码广播。设备接收到之后自动尝试连接此WIFI网络,连接成功即配置完成。 (2) SoftAP模式:设备在AP模式下,相当于热点,手机可以直接与设备连接,并将可用的WIFI网络SSID和密码发送给设备,设备接收到配置信息后自动尝试连接路由器,连接成功则自动切换到征程使用的模式。   通过这个模式可以让ESP8266-01S连接到设置的网络中与对应数据点的服务器进行连接,ESP8266-01S连接到对应网络之后,就可以对MCU的数据采集进行上传给服务器,也可以对服务器的控制指令进行下传给MCU,进而控制各种外设。 手机APP是直接与机智云服务器进行连接的,可以通过任何网络4G与WIFI等进行控制,手机APP端绑定了此设备之后,设备连接对应WIFI之后,设备上线,然后就可以通过控制app端进行控制事件下发与数据接收显示。

  • 2022-03-25
  • 发表了主题帖: 使用机智云DTU开发一款智能远程鱼池控制系统

    在工业产品中,很多传感器,设备,都是基于标准的modbus RTU协议,机智云为解决开发者开发产品周期,推出基于modbusRTU协议设备的产品GC511 CAT.1 DTU无线数据中端,用户无需编写程序即可快速接入机智云。 开发内容: 1.     远程控制循环泵,假山泵,杀菌灯,充氧机等设备(可增加其他设备)。 2.     远程采集水温(可增加其他传感器,如PH,浊度,亚硝酸盐以及硝酸盐等传感器)   开发材料: 1.     机智云GC511-DTU 2.     485空开(Modbus协议) 3.     485防水温度传感器DS18B20(Modbus协议) 云端配置:        1.进入机智云新版本开发者中心,点击左上角创建,创建一个新的移动网络产品。 2. 将该PK及设备外壳上二维码的照片发送给机智云微信客服, 等待客服回复,重启设备,可以看到设备管理里面设备已经上线。   4.     为产品配置Adapter,来完成DTU和数据点传输之间的转换。 一丶根据温度传感器通讯协议在云端进行配置: 根据以上协议,我们定义云端Adapter,基础配置和分组配置如下圈中部分。 二丶485空开协议及Adapter配置,由于有4个空开,此处采用地址为01 02 03 04 。 根据以上协议,我们对Adapter进行如下配置 配置完成过后,保存,重启设备,按照下图连接各个设备 接线完成之后重启设备,即可在云端和APP对设备进行数据采集以及控制设备。 教程到此结束,机智云GC511固件针对于modbus标准协议传感器可直接配置开发,只需要在新版本开发者中心中配置Adapter即可完成DTU设备协议的配置。无需在进行传统的代码的开发,即可接入机智云。APP的开发和原有的APP开发一致。  

  • 2022-02-23
  • 发表了主题帖: 基于arduino和机智云的实验室监测系统

    实验室监测领域长期存在着耗费人力、环境数据监测查看不便及相关检测设备不易维护等问题,针对这些问题提出一种基于物联网云平台的解决方法。使用Arduino板和多种传感器对实验室进行数据采集,通过WiFi无线网络上传到机智云云服务平台,进一步发送到本地Python服务器的MySQL数据库,并在手机安卓应用端显示。实验结果表明管理员和检查员可对实验室随时随地接收异常信息提醒,查看实验室每日及每周历史数据。该实验室监测系统可以减少实验室人力、远程管理、方便维护。     引言   许多高校实验室安装了火警系统、温湿度监测系统等,这些系统大多安装后无法及时查看是否已损坏,在发生事故时系统的预警、处理等不如预期,且系统安装成本高昂,布线复杂。大多环境监测报警系统采用PC端接收查看服务器端传来的数据,当管理员外出或者不在电脑前时,便无法实时查看相关数据,对实验室的管理带来一定不便。     当前各国高度重视物联网发展带来的产业机遇,大力推进构建物联网生态。国内外利用物联网对实验室监测的有关文献不多,且没有给出详细的实施方案。文献[1]提出利用Onenet平台管理实验室教学和预约,实验资源利用率明显提高,不足在于该平台与登录网站的连接开发难度大,系统操作步骤无图展示。     文献[2]介绍了实验室化学品管理现状,采用人脸识别和语音交互技术实现微信智能客服,但是没有进一步具体方案说明。文献[3]利用Arduino和传感器设计了实验台和管理员端,可以完成签到、监控,无远程管理功能。文献[4]将实验室环境监测、设备管理、实验教学结合,提出相关设计思路,但没有系统手机端和PC端应用展示。     本文在上述研究的基础上,将传感器技术、无线通信、云平台、数据库、移动应用技术相结合,设计了一套实验室监测系统,利用Arduino上多路外设传感器模块,如实验室的温湿度、门的开合、空气质量等进行监测并采集相关数据,成本较低。通过WiFi无线通信技术将数据上传到机智云云服务平台,无需网络布线。进一步传输到本地Python服务器的MySQL数据库,轻量化,方便开发。管理员安卓手机应用连接到数据库,可随时查看动态、历史数据、报警,实现远程管理、及时处理。     1 实验室检测系统的设计 1.1云服务平台的选择     微软、IBM、亚马逊、百度、阿里、华为等产业巨头先后推出物联网操作系统、云平台和大数据分析服务,例如谷歌发布Android Things,亚马逊推出Amazon AWS IOT,中国移动自主开发Onenet开放平台,京东、360等企业也在积极开展物联网平台建设[5-6],其中机智云物联网平台有着独到优势,提供了从定义产品、设备端开发调试、应用开发、产测、云端开发、运营管理、数据服务等覆盖智能硬件接入到运营管理全生命周期服务的能力。     对于各类无线通信芯片均有良好的兼容性,且在机智云淘宝店的WiFi模组中已经移植好了底层程序GAgent,可以直接使用机智云官方应用配置连接并传输数据。机智云云服务平台提供了许多方便开发的服务功能,例如可以在网页上远程监控调试设备,对于开发者来说十分便利,因此选择机智云作为云服务平台。   1.2硬件功能及设计     在硬件上由于每个实验室至少布置一个节点,高校实验室数量较多,因此需要考虑成本。节点采用Arduino Atmega328p主芯片,拥有模拟输入通道6路,数字I/O通道14路,易扩展,可以驱动多路外设传感器,来对实验室的各类环境参数进行采集。     监测温湿度的传感器选择DHT11,能够同时监测温度和湿度这两项参数。监测门开合状态选择一款可调有效距离的红外传感器,通过在一定距离下监测是否有遮挡物就可判断门的开合状态,若有遮挡物则表示门在打开,反之若没有则表示门已关闭。监测空气质量的传感器选择MQ135,在实际中广泛使用,对烟雾、硫化物、氨气、苯等有害气体较为灵敏。水位传感器、实验台电压传感器等不再赘述[7-8]。设置好对应I/O口驱动,采集数据的频率,然后将采集来的数据进行矫正、封装处理。     传感器数据通过无线通信模块传输到Aiot开发平台,机智云物联网平台支持WiFi、4G、Wi-Fi +蓝牙模组,WiFi+NFC模组通信方式,例如乐鑫esp8266、中移,移远等。考虑到通信数据量和后续功能扩展,选择ESP8266 WiFi模块实现数据转发[9-10]。     机智云平台接收到数据后,传输到管理员手机应用端,进一步保存到本地服务器,因此使用固定IP地址以便手机应用端访问,数据保存在本地数据库。本地服务器对检查员发送的查询请求进行回应,并从数据库中查询相关信息返回给检查员。   1.3软件功能及设计     Python语言相较于其他编程语言,具有开发速度快、代码量少、使用方便及内部类型使用成本低等显著优势。MySQL数据库管理系统应用广泛,兼容性优良,使得搭建本地数据库并进行关联更为简便、快速[11-12]。因此采用Python语言来实现本地服务器的行为逻辑,数据库采用MySQL。本地服务器主要功能:1)配置管理员和检查员账号密码,分配不同检查员到不同实验室;2)接收管理员应用发来的数据,并将数据保存到本地数据库;3)接收检查员应用查询数据请求,从本地数据库中查询相关数据并返回。 安卓手机应用有两种身份权限:管理员和检查员,通过登陆账号进行区分[13-15]。系统框架如图1所示。     管理员主要负责管理整个实验室监测系统硬件,功能主要为:1)与机智云平台连接,接收每一个实验室的Arduino传感器所采集到的数据;2)分辨数据来自于哪一个实验室,进行封装处理,将这些处理好的数据发送给本地服务器;3)读取本地服务器的相关数据,对这些数据进行处理并利用。     检查员主要负责查看自己所负责实验室的情况,若实验室有异常情况及时处理,功能主要为:1)访问服务器读取账号密码相关信息,成功登录后将根据账号来判断管理区域;2)查询并接收管理员传送到服务器的实验室数据,将数据进行处理,分辨属于哪一个实验室并动态显示出来;3)若数据异常,则发送报警消息提醒检查员;4)最后根据相关信息生成历史数据曲线,从而对整体情况有更好的把握。       图1 系统框架     2   实验室监测系统软件实现 2.1手机应用软件     登录功能是在点击登录按钮的时候,先将填写的账号信息发送给本地服务器进行验证,之后将接收到的服务器信息作为message消息发送到handler中进行处理。账号信息错误则进行提示,若账号正确则在handler中再次向服务器发送密码信息。如此反复验证,直至账号密码皆正确则可进入下一页面,系统登录界面如图2所示。   图2 登录页面     在登录成功后,根据账号判断属于管理员还是检查员。以检查员为例,进入指定的实验室监测区域列表页面,在此页面中不断向服务器查询本人所负责的实验室信息,并将信息保存到手机,然后判断这些信息是否正常,若有异常则采用顶栏消息通知的方式对检查员进行提醒。图3所示为某检查员负责实验室选择页面,检查员账号不同,这里的选择页面也不同。     动态显示数据功能,是在进入实验室数据查看页面后,开一个新线程读取本地服务器数据库中的相关数据,将数据以message的形式发送给handler,handler接收到数据后进行处理并动态更新,在发现异常数据时,会把该数据字体变红以提醒检查员。     历史数据曲线功能是在点击实验室数据查看页面的历史数据按钮后,将进入历史数据曲线页面,然后在绘制曲线图的同时开两个线程,分别去访问服务器读取相关数据,将服务器发回的数据以message的形式保存,并在handler中进行处理,handler内主要将数据保存下来,并赋值给图表进行更新绘制,图表的绘制采用MPAndroidChart库。MPAndroidChart为目前安卓图表库中最成熟、功能最全的库之一,对于新手开发图表十分简单,缺点是引入后项目文件会变得较大。   图3 实验室选择页面     2.2本地服务器软件     本地服务器,读取本机IP地址作为服务器IP地址,然后设置端口进行通信。完成对数据库的连接及服务器设定的初始化操作后,采用循环的方式进行监听手机应用端的请求通信,根据传送过来的数据开头标识位来进行判断该请求为何种请求,并进行下一步的处理。在响应完一次请求后将断开连接,并继续监听下一次的请求。     3   实验结果分析 3.1本地服务器接收数据并保存到数据库     首先测试的是本地服务器能否正常接收管理员应用数据并保存到本地数据库,通过对比数据库数据变化及服务器状态进行判断。   图4所示为数据库更新前的数据库,最后一条数据id为3 060,时间为:2020-03-28 05:59:28。   图4 本地服务器更新前的数据库   图5所示为服务器cmd运行图,服务器发送了3次“success”,代表已成功接收3条数据并存入数据库。   图6所示为数据库更新3条数据后的数据库,最后一条数据id为3 063,且时间也已更新为:2020-03-28 14:47:03。   以上实验表明服务器已能正常接收数据并保存到本地数据库中。   3.2 数据监测和显示     图7所示为实验室动态数据显示页面。这里需对数据进行解析,即对接收到的数据进行截取并对截取的部分进行检测,由于在源数据中,一些数据的有效数字前会含有“0”,例如:“023”,所以DataJX()函数还对截取的数据进行去0工作,若截取的数据的有效数字前含有“0”,则将“0”去除,若没有则直接进行输出显示。setTextColor函数修改字体颜色,异常数据字体颜色需改变,而当异常数据恢复正常时,字体则要变回原本的颜色。   图5 本地服务器成功接受数据     图6 本地服务器更新后的数据库     图7实验室动态数据查看     图8所示为应用提示异常数据消息,这里取系统时间来生成id,顶栏消息的发送依赖通道进行,而只有拥有不同的通道id,才能发送多条不同的顶栏消息。当有多实验室同时出现异常时,顶栏消息可以发送多条消息进行提醒。mVibrator.vibrate(1000)函数在发送消息的同时使手机震动,震动时间为1s。     图8异常报警提醒     使用Arduino主芯片发送模拟错误数据,温度50 ℃,图7已显示有异常数据,并颜色改变为红色,图8显示已收到异常报警信息,以上实验表明数据监测功能正常。     图9所示为历史数据图表页面,分为每日数据和每周数据两个图表。绘制每周数据图表的函数chart(),参数包括3位数据,0位数据为y轴最小值,1位数据为y轴最大值,2位数据为y轴数据最小间隔。向数据图表添加新的数据并更新绘制的函数entry_add_wc(),其第1个参数为x轴的坐标,第2个参数为y轴坐标,MPAndroidChart添加数据采用的是Entry类型数据,将x轴与y轴坐标合在一起进行传入,传入后进行更新绘制。历史数据显示完整,功能正常。   图9 历史数据曲线显示   4  结论 本文系统将传感器、无线通信、云平台、数据库、移动应用技术相结合,由性价比高的Arduino板连接多传感器,降低了现有实验室监测系统的成本,采用WiFi模块和机智云平台收集并发送数据到本地数据库,安装方便,使实验室管理员能随时随地利用手机端应用,进行查看动态数据、历史数据、接收报警信息,节省了实验室管理的时间、人力成本,更好的保护实验室人员和设备。下一步,系统将摄像头接入系统,通过定时拍照、人脸识别技术判断实验室有无异常;将现有空气净化设备接入,实现新风灭菌除臭;采用数据可视化技术,使系统用户更直观了解实验室状态。  

  • 2022-02-16
  • 发表了主题帖: 用机智云SOC方案,开发一款月球灯

    写在前面:又是一年佳节时,一想到元宵节,扑面而来的是汤圆,一颗颗圆圆的汤圆,有白色糯米味的、有紫薯味的、还有黄色小米味的,五彩斑斓的颜色,就像生活一样,多姿多彩。我想做一个能变换各种颜色的月球灯,来点缀元宵,点亮生活。   本文主要讲解了月球灯的PCB设计、数据点定义、SOC开发、驱动移植、APP开发、远程控制功能等,适合IoT入门学习。   第一讲,月球灯PCB(SOC篇) https://www.bilibili.com/video/BV1P4411X73j UP主分享月球灯设计原理,布局如何更方便。   第二讲,环境搭建、编辑、编译(SOC) https://www.bilibili.com/video/BV164411X7nC UP主逐一讲解创建产品,讲解数据点(功能点)的原理,如何生成和下载MCU代码包,为何选择SOC开发,SOC开发环境介绍和说明....以及一些使用机智云物联网平台进行开发的小技巧。 第三讲,WS2812驱动移植(SOC) https://www.bilibili.com/video/BV184411Q7H4 使用安信可IDE环境,进行驱动的移植。从导入、编译、初始化到具体代码修改,展示工程烧录和串口打印,阐述以及一些细节上的说明和注意事项。 再使用公版APP(机智云)进行配网、开关灯演示灯光颜色变化等操作。   第四讲,自动生成APP https://www.bilibili.com/video/BV1H4411U7GX 主要讲述如何使用机智云AIoT开发平台的“应用开发”制作一款APP。从最初的应用开发、代码包下载、修改代码和功能、编译应用,到如何在自己的手机上安装该APP,并实现控制月球灯、绑定其他设备的功能。    

  • 2022-02-14
  • 发表了主题帖: 基于STM32与机智云的智能蜡疗机

    基于STM32与机智云的智能蜡疗机   摘要: 随着物理疗法在慢病治疗中的效果获得认可, 传统的石蜡疗法被广泛应用在医院的理疗科。目前, 蜡疗机的制蜡方法虽已趋于成熟, 但仍存在制蜡效率低下、功耗大、不够智能等问题, 因此有必要对蜡疗机的制蜡效率及智能化程度进行研究。以STM32微控制器为核心, 结合G510通信模块, 对蜡疗机的硬件系统进行优化设计;通过机智云物联网开发技术, 对蜡疗机进行控制和通信。   试验结果表明, 与现有产品相比, 该系统减少了制蜡时间、降低了蜡疗机的功耗, 实现了蜡疗机的物联网控制。该研究为进一步完善蜡疗机的功效提供了设备基础, 对蜡疗机的广泛应用具有积极促进作用, 对今后利用石蜡疗法进行理疗大数据的挖掘与应用具有重要意义。   0 引言   经过优化, 将融蜡和保温组合在一起, 设计了具有融蜡、蜡饼保温功能的自动化一体机[3- 5]。其不仅大大降低了主观因素对制蜡过程的影响, 而且在蜡饼成型的过程中使用了带温度传感器的可调温恒温箱, 可以准确设置蜡饼在使用时的温度, 提高了热疗效果。然而蜡饼成型过程所耗时间过长, 严重降低蜡疗机的工作效率和性价比, 同时不支持远程无线控制, 也无法支持融入物联网, 以及为规模应用与医疗大数据提供支撑.     因此, 本设计在当前热销智能蜡疗机的基础上, 通过智能化控制恒温箱侧门开闭, 以减少液体蜡饼成型时间来降低功耗;增加了物联网模块, 并使用机智云开发平台开发了移动客户端控制程序, 以支持远程控制、显示与云端数据存储与共享。   1 整体设计方案   本设计主要由融蜡箱、注蜡系统、恒温箱、控制系统组成。融蜡箱是采用水融蜡原理将固体蜡融化为液体蜡的场所, 其下部的加热棒通过加热融蜡箱下部的水, 使与水接触的蜡慢慢融化。水融蜡方式不仅可以增加医用石蜡的使用寿命, 而且可以防止因加热棒直接加热固体蜡导致局部高温而造成石蜡燃烧等意外事故的发生[7]。注蜡系统主要由杂物过滤器、推杆电机、注蜡管和开关阀门组成。     在注蜡阶段, 液体蜡通过杂物过滤器后进入注蜡管, 并通过打开的注蜡阀门流入相应的蜡盘内。恒温箱是医用石蜡由液态凝固为略高于人体体温且具有可塑固体石蜡的场所。在融蜡过程结束之后、注蜡之前, 系统会将恒温箱升至59 ℃左右, 防止注蜡管中凝蜡和蜡在盘中凝蜡不均导致的溢出[8]。控制系统由传感器、控制板、工业屏幕和控制输出部分组成。微控制器通过接收温度传感器、水位报警传感器、开/关门检测传感器的信号, 判断当前设备运行状态并作出相应的决策。     系统整体框图如图1所示。   图1 系统整体框图   2 硬件电路设计   智能蜡疗机的硬件电路部分主要由STM32最小系统、电压变换电路、数据存储电路、温度传感器、水位/开门/关门检测器、输出控制器电路和TTL-485信号转换电路组成。   2.1 主控电路设计   主控电路由以STM32F103C8T6为核心的微控制器和**电路构成。该控制器是一款基于ARM Cortex- M 内核STM32系列的32位的微控制器, 程序存储器容量为64KB, 工作电压为2~3.6 V, 可在-40~85 ℃温度下工作[9- 10]。其具有33个I/O接口和3个USART通信接口, 可以满足连传感器、控制器和G510通信模块的需求。   2.2 供电电路设计   考虑到控制侧门开关和注蜡阀门的推杆电机皆为24 V供电, 因此系统采用24 V供电, 并通过降压得到12 V、5 V和3.3 V, 以满足触摸屏和不同芯片对电压的需求。其中, 24 V转12 V降压芯片采用3 A电流输出降压开关型集成稳压电路LM2576- 12 V。该芯片与电容、电感组成的降压电路产生的12 V电压可以满足为工业触摸屏供电的要求。12 V转5 V降压芯片采用输出为1 A的集成稳压芯片LM4805。5 V转3.3 V采用AMS1117- 3.3 V正向低压降稳压器。供电电路设计如图2所示。     图2 供电电路设计图     2.3 水位/开/关门检测传感器   智能蜡疗机融蜡过程采用水溶蜡原理, 当融蜡箱内含水较少时, 可能出现局部温度达到蜡燃点导致火灾的严重后果, 因此需要对融蜡箱设置最低水位报警。而开门/关门检测传感器能够检测在运行中侧门的开关状态并判断部分运行故障。水位检测传感器信号接收电路如图3所示。     当水位低于最低报警刻度时, 传感器输入信号线与输出信号线导通, 光电耦合器发射管工作使接收二极管导通, 微控制器的PB5端口电位拉低, 触发相应外部中断提醒融蜡箱缺水并进行报警。开/关门检测传感器采用限位开关检测侧门的打开关闭状态。当侧门打开/关闭后, 触动相应的限位开关并使其导通, 其信号接收原理与水位信号接收原理一致。     图3 水位检测传感器信号接收电路     2.4 数据存储电路   本设计添加数据存储电路, 对融蜡温度、注蜡盘数、注蜡时间等设置值进行保存, 从而避免每次关机后设置内容丢失。数据存储芯片采用串行Flash存储器W25Q128BV。该芯片具有引脚少、功耗低、存储字节多、传输速度快和存储灵活的优点, 可以实现蜡疗机在使用过程中对各种数据的存储记忆功能。     2.5 输出控制电路设计   输出控制电路由控制电路和被控制电路组成。工作时, 微控制器相应I/O口输出低、高电平控制光电耦合器开、关, 继而控制继电器接入电压24 V、0 V, 使输出端衔铁与铁芯吸合、断开, 从而加热棒、风扇电机或推杆电机两端存在、失去电压, 进而开始、停止工作。     2.6 TTL-RS-485信号转换电路设计   RS-485串行总线标准采用平衡发送和差分接收的传输方式与工业触摸屏进行数据交换。该通信协议可以显著提高传输信号抑制共模干扰的能力。SP3485是一款低功耗半双工收发器, 具有数据传输速度高 (10 Mbit/s) 、驱动能力强、输入灵敏度低 (±200 mV) 的优点, 可以完全满足RS-485串行协议的要求。     2.7 G510无线传输接口电路设计   G510通信模块组成的电路能够被任何需要通过蜂窝网络进行语音通话或数据传输的系统或者产品集成。其GSM支持四频 850/900/1 800/1 900 MHz, GPRS 支持Class 10[11]。本设计采用G510模块进行无线通信, 能够对智能蜡疗机进行提升, 使之从一个独立的产品, 成为接入智能物联网进行云互联的智能终端。     3 软件开发设计   软件开发分为设备端、手机客户端开发两部分。设备端程序又分为工业触摸屏驱动控制与内存保护单元控制两部分。其中, 工业触摸屏和手机客户端部分主要实现人机交互, STM32微控制器程序部分执行命令并将各种运行参数传输到工业触摸屏和手机客户端。   3.1 手机客户端程序开发   本文使用机智云APP作为客户端调试工具。该工具是机智云物联网开发平台提供的全球首款物联网 (Internet of things, IoT) 设备通用调试工具[12]。本文通过例化初始化模块、用户模块、配置模块、设备列表模块和控制模块这五个模块不仅实现了需要的功能, 并且实现了智能蜡疗机控制、运行数据云端保存的功能。     3.2 工业触摸屏驱动程序与STM32微控制器程序   工业触摸屏是进行人机交互的方式之一, 主要用于显示蜡疗机工作运行状态、更改各项运行参数和启动相应的工作模式。本文采用北京迪文科技有限公司研发的基于K600+内核所设计的智能型、图形界面、人机系统软件DGUS的工业触摸屏。该工业触摸屏有56 KB变量空间、8通道曲线趋势图寄存器、156 B配置寄存器控件、256 MB的Flash存储器、任意多的触控控件, 不仅可以实现变量显示、运算和传输的响应速度, 而且集成了DWIN OS平台, 方便使用丰富的指令进行二次开发。   微控制器流程图如图4所示。       STM32微控制器是智能蜡疗机系统运行的核心, 其控制程序主要实现以下功能。 ① 将融蜡箱和恒温箱温度数据传输到触摸屏和手机客户端。 ② 通过检测传感器判断系统运行状态, 并判断系统运行是否出现故障。 ③ 根据触摸屏或者手机客户端命令执行相应的运行模式。     3.3 设备端整体软件设计方案   本设计主要功能有自动运行模式、手动运行模式和设置模式。   ① 自动运行模式是智能蜡疗机的主要运行模式。不仅可以采用触摸屏或移动客户端执行自动运行功能, 而且可以设置每天自动运行的时间, 方便医生和护士使用。   ② 手动运行模式是自动运行功能的辅助功能, 可以丰富个性化医疗的实施。   ③ 设置功能主要完成各项运行参数的设置, 包括编辑自动模式、系统时间设置和时间段设置。编辑自动模式的各项参数包括水箱加热温度、恒温箱注蜡温度、恒温箱保持温度、蜡饼成型温度、注蜡盘数、注蜡时间, 主要用于设置手动运行模式和每天早上自动开机运行自动模式时所需要的各项参数。系统时间设置主要是设置当前日期和时间。时间段设置主要用于设置每天自动开机时间、自动关机时间和自动开机后是否运行自动模式 (模式1为运行自动模式, 模式0为开机水箱只加热) 。 自动运行模式流程图如图5所示。     图5 自动运行模式流程图     3.4 现场应用   本设计的智能蜡疗机在盘锦市某医院理疗科进行了4个月的试运行。传统蜡疗机和智能蜡疗机每天分别制蜡30盘、运行12h、待机12h。记录其平均制蜡时间、石蜡寿命和功耗, 如表1所示。       由表1可以看出, 蜡疗机的平均制蜡时间由原来的4h缩减到2h。其主要原因是在蜡饼成型阶段, 液体蜡进入恒温箱后引起恒温箱温度上升,封闭的恒温箱使得温度下降缓慢。传统制蜡技术忽略这一特性使得蜡饼成型过程较长, 而智能蜡疗机通过控制侧门的不断开闭使恒温箱温度快速降低,从而减少蜡饼成型时间。   医用石蜡的使用寿命由原来的两个月增加到三个月, 蜡疗机功耗降低了40%。其主要原因是智能蜡疗机在非制蜡状态下, 水箱采用间歇性加热技术, 使石蜡温度始终略高于最低熔点温度, 不仅降低了设备功耗, 而且延长了石蜡使用寿命。   4 结束语   通过在医院的实际推广应用, 本文设计的智能蜡疗机得到了较好的效果。统计数据表明, 蜡疗机的平均制蜡时间由原来的4h缩减到2h, 缩短了50%;医用石蜡的使用寿命由原来的两个月增加到三个月,石蜡寿命延长了1.5倍,且功耗降低了40%。智能蜡疗机减少了患者的等待时间和医疗成本, 节省了医护人员的操作时间及操作难度。因此, 此蜡疗机具有很好的应用前景。  

  • 2022-01-28
  • 发表了日志: 基于物联网的多参数水质监测系统设计

  • 发表了主题帖: 基于物联网的多参数水质监测系统设计

    本帖最后由 毛球大大 于 2022-1-28 17:28 编辑 摘要: 为解决传统水质监测耗时费力、采样精度低、数据统计困难等问题,设计了基于物联网的多参数水质监测系统。该系统以STM32微处理器为控制核心,通过控制内部ADC采集通道对水体温度、浑浊度、pH值和TDS值进行数据采集,以esp8266模块与物联网平台服务器通信,通过串口与LabVIEW上位机进行数据传输。同时,用户可以通过OLED屏、手机App和LabVIEW上位机等3种方式对水质参数进行监测与预警。试验证明,该系统运行稳定可靠,人机交互界面简单方便,且测量精度较高。   随着社会的进步与发展,人们对饮用水、生活用水和养殖用水的水体质量都越来越关注。然而近几年来水体污染问题经常发生,这对工农业生产和人民的身体健康都产生了较大威胁[1],因此及时掌握水体的具体情况变得十分必要[2]。     在以往,对水体参数的采集通常使用人工方式测量与记录,该方式耗时费力,且采集到的数据具有偶然性,也不利于对水体水质进行综合分析。故在此设计了一套基于物联网的水质监测系统,该系统能够实时监测水体的温度、浑浊度、溶解性固体总量TDS(total dissolved solids)以及酸碱度(pH),并上传到Lab VIEW上位机生成变化曲线[3-5]。     同时还通过WiFi模块将水质信息传输到机智云物联网平台服务器[6],用户可以通过OLED显示屏、手机App、Lab VIEW上位机等3种方式查看查看水质参数具体数值。该系统利用物联网技术解决了时间与空间的限制,便于在任何时间地点查看水质情况,具有较高的研究价值。   1 系统总体结构设计     基于物联网的水质监测系统下位机围绕STM32单片机展开工作;温度、浊度、TDS、p H这4个传感器模块用于采集水体参数信息;OLED显示模块用于现场显示水体参数具体数值;USB转串口模块负责串口与上位机间数据传输;云服务器负责接收和发送WiFi模块传输过来的数据;手机App负责远距离监测水质参数;Lab VIEW上位机负责电脑端水质数据监测并提供报警服务。系统总体结构如图1所示。   图1 系统总体结构示意图     首先,STM32F103C8T6单片机内部ADC将pH、浊度和TDS传感器采集的模拟信号转换为数字信号,由于温度传感器的输出为数字信号,因此无需A/D转换。MCU将转化后的数字信号发送至内部数据缓冲区,利用串行数据总线将数据传输到OLED显示屏实时显示,并通过USB转串口模块将数据传输到Lab VIEW上位机。同时,MCU通过USART3把数据发送给WiFi模块,WiFi模块再通过TCP/IP协议把数据发送至机智云物联网平台服务器保存,这时手机App通过注册登录后绑定设备,就可以从服务器接收数据信息,从而查看水质参数。     2 系统硬件设计 2.1 STM32单片机     主控模块选用STM32F103C8T6微处理器,该单片机功耗小、成本低,功能丰富[7]。其内核为基于ARM架构32位的Cortex鄄M3 CPU,最高主频可达72MHz,其具有64 k B Flash,20 k B的SRAM,2个12位ADC,16个ADC采集通道,9个片上通信接口,37个快速I/O端口,因而被广泛应用于各种低成本的嵌入式产品中。   2.2 浊度传感器模块   浊度传感器采用TSW鄄30浊度模块。该模块供电电压为5V,最大工作电流为40 m A,工作温度为-20~90℃。因该模块采集到的为模拟信号,需要STM32单片机内置ADC转化为数字信号才能被MCU读取使用,在此选取STM32F103C8T6的ADC1的通道1采集浊度参数,其对应单片机引脚为PA1。浊度传感器与主控模块STM32单片机接线如图2所示。       图2 浊度传感器接线示意图   2.3 pH值传感器及温度传感器模块     水体pH值测量的p H电极型号为E鄄201鄄C。该模块供电电压为5 V,测量p H值范围为0~14,工作温度范围为0~60℃,测量精度为±0.1(20℃),响应时间小于1 min。由于pH值受温度的影响较大,通常需要进行温度补偿,因此该模块自带温度传感器连接引脚T0。p H值传感器与主控模块STM32单片机接线如图3所示,其中引脚PA0为STM32单片机ADC1的采集通道0。     图3 PH传感器接线示意图     在正常情况下,水体温度不会发生很大变化。若水温发生急剧变化通常是由于水体受到污染,因此水体温度也作为评估水质好坏的一个重要指标。温度传感器采用DS18B20模块,该模块接3.3V供电,可检测温度最高达125℃,最低可达-55℃,测量精度可达±0.5℃。温度传感器与p H传感器接线如图4所示。     图4 温度传感器接线示意图   2.4 TDS传感器模块     水体TDS值测量采用SEN0244型模拟TDS传感器模块。该模块供电电压为5 V,工作电流范围为3~6 m A,模拟信号输出电压范围为0~2.3 V,TDS测量范围为(0~1000)×10-6,测量精度为±5%。TDS传感器与主控模块STM32单片机接线如图5所示,PA2引脚对应为STM32单片机ADC1的采集通道2。   图5 TDS传感器接线示意图   2.5 OLED显示模块     由于系统需要显示数字、英文以及汉字,因此选用2.4384cm的OLED显示屏。该显示屏采用IIC通信,仅需连接4个引脚即可使用,非常方便。其与STN32单片机接线如图6所示。     图6 OLED显示模块连接示意图     2.6 Wi Fi及串口通信模块     Wi Fi模块采用安信可公司的ESP8266鄄12F模块。该模块兼容3.3 V与5 V电压输入,在此VCC接3.3 V供电,GND接地,GPIO0接1 kΩ上拉电阻默认设置为工作模式,TXD串口发送引脚接单片机USART3的接收引脚PB10,RXD串口发送引脚接单片机USART3的发送引脚PB11,RST复位引脚默认接1 kΩ上拉电阻,低电平时有效。Wi Fi模块电路如图7所示。     图7 WiFi模块电路     由于上位机与STM32单片机的通信方式不同,因此需要USB转串口模块实现两者间的通信功能。该模块TXD与RXD引脚与STM32单片机US鄄ART1的RXD和TXD引脚连接,从而实现把MCU内部数据缓冲区中的数据传输至上位机。USB转串口模块电路如图8所示。   图8  USB转串口模块电路   3 系统软件设计 3.1 主控模块软件设计       系统主控模块软件部分的开发工具为KeilμVision5,编程语言为C语言。主控模块软件主要有系统初始化程序、定时器中断程序、传感器信号采集程序、OLED显示程序、Wi Fi传输程序。当系统通电后首先会对系统各个模块执行初始化操作,即进行硬件驱动初始化,待初始化完毕后再调用传感器模块采集水体数据,采集的数据经MCU处理后显示在OLED显示屏和LabVIEW上位机上。同时,若当前Wi Fi连接正常,Wi Fi模块会将经MCU处理并封装的数据点协议报文发送到机智云平台服务器,此时可通过登录机智云手机App实时查看各项水质信息。系统软件整体流程如图9所示。 图9 系统软件整体流程     3.2 上位机软件设计     系统上位机软件基于Lab VIEW开发完成。该上位机显示界面采用图形化的方式展现出所测得的水体数据,操作界面也非常友好、简单,采用串口通信的方式实现与STM32单片机间的数据传输。系统上位机可分为参数数值显示与参数预警设置2个部分,前者用于显示当前p H、TDS、浑浊度、温度的具体数值和曲线图,便于用户整体掌握水质的具体情况;后者用于设置水质参数上限值和水质数据的保存位置,并提供水体污染报警服务,提醒用户采取措施抑制水体污染。上位机部分程序框图如图10所示。     3.3云平台及App的设计与实现     由于自主搭建服务器的成本及难度比较大,因此选用机智云Aiot开发平台作为系统的服务器,机智云为一款致力于物联网、软硬件云服务的开发平台。此次水质监测系统App的开发工具为Android Stu鄄dio。为了使用户更方便地开发手机App并与云服务器对接,机智云公司提供了一套App的开源框架,其框架内部已完成App与云服务器的通信功能,用户只需根据自身功能需求在此框架上进行二次开发。     图10部分程序框图     用户在打开手机App后,会提示用户进行注册,在完成注册操作后让ESP8266 Wi Fi模块进入Air鄄Link模式,然后手机App会搜索并与当前设备绑定,此时系统就会接入无线局域网络与服务器通信。App显示界面如图11所示。   图11 APP显示界面     4 系统测试结果与分析     为保证水质监测系统采集数据的准确性,需要对系统进行实际测试,下位机运行如图12所示。   测试试验选取PH鄄100高精度p H测试笔作为p H值的标准检测仪器;选取SGZ鄄1000BS便携式浊度仪作为浑浊度的标准检测仪器;选取格力TDS检测笔作为TDS与温度的标准检测仪器;选择实验室为试验地点,接取3杯自来水,然后向这3杯自来水中由少到多加入p H值为4.0的缓冲液、含磷化肥、干燥的泥土及90℃开水作为待测溶液,将待测溶液充分搅拌后静置10 s,再分别使用标准检测仪器、本文系统进行检测,得到的试验数据见表1。       图12 下位机运行   表1 水质参数测试数据     注:NTU(nephelometric turbidityunit)为散射浊度单位。   表中,由标准检测仪器检测的数据为标准值,由本系统测量得到的数据为测量值;每种参数的3个数据自上而下对应于污染程度逐渐增加的待测溶液。     经过试验验证,采用所设计系统测量出来的水质参数与标准值间的误差均在3%以内,且上位机运行显示结果与下位机相同,由此表明该系统可以稳定地检测水质各项参数。上位机运行界面如图13所示。   图13 上位机运行界面   5 结语   通过试验验证,所设计的基于物联网多参数水质监控系统能够稳定运行,可以实现多种方式对水质参数的实时监测,且系统造价低,测量精度较高。另外,Lab VIEW上位机人机交互界面操作简单,功能较为丰富,手机App显示界面较为直观,该系统能够满足用户的绝大部分需求。该系统还可以应用于水产养殖等需要监测水质的领域,具有较强的应用前景[8]。

  • 2022-01-20
  • 发表了主题帖: 基于机智云的一种智能水质检测仪设计

    摘要: 针对传统的水质检测仪器存在因体积过大使用不便,检测参数单一以及不能对水质进行实时监控显示的问题,设计了一款便携式水质在线检测仪。设计以STC8A8K64S4A12单片机为控制器,由温度采集模块、pH测量模块、TDS检测模块等完成水质的温度、pH及TDS参数的检测;通过esp8266无线模块、手机App模块的设计与应用,实现手持式监测功能,结合C语言程序设计,最终实现了一种智能型便携式的水质检测仪。测试结果表明,该系统操作简单方便,准确度较好,具有广泛的应用前景。   引言 在日常生活中,对日常普通人来说,这样的工作是不现实的。中国在多参数水质检测仪技术开发和产品生产方面成果较好,可自动检测pH、溶解氧、水温、浊度和导电率等5种参数,但是价格较高,不适宜在民用生活中使用。[6-7]。为了保证饮用水的水质安全,不仅需要在水源处对水质检测进行把关,还需要将水质检测工作落实到千家万户中去,这样才能真正的保证饮用水的安全。作为民用产品,便携式及低廉的产品价格是基本要求,满足这一要求的水质测试仪应具有小型、低成本、便捷和实用性特点,因此,本设计以单片机技术为基础,采用内嵌式AD转换模块实现模数的转换,从而实现小型便携式的智能水质检测器。       1,系统硬件电路设计   系统主要以STC8A8K64S4A12单片机为主控芯片,围绕单片机设计了电源模块、温度采集模块、pH值采集模块、TDS采集模块、WiFi通信模块、OLED显示模块等,其系统结构框图如图1所示。     图1系统结构框图     1.1主控制器的选型     拟采用STC8系列的单片机。由于STC8系列MCU使用了比现有的8051快12倍的超高速8051核心[8-9]。不需要外部晶振和外部复位电路,减小体积的同时,也极大地方便了设计。内置15通道的12bits高精度ADC,速度最快可达800K,对于水质检测仪中模拟量输出的传感器具有良好的采集能力[10]。所有的GPIO均支持4种模式,分别为高阻输入、开漏输出、强推挽输出和准双向口。在数字信号采集和处理中有速度和稳定性的双重优势。故本设计选择型号为STC8A8K64S4A12的单片机作为主控芯片。   1.2pH检测电路设计     pH检测模块电路设计如图2所示,pH电极测量后产生的mV信号通过BNC接口输出,输出到pH模块通过电路来实现信号的滤波放大,将极小的mV电压信号放大为0~5V电压信号,放大后的信号由J2端口输出到单片机[11]。     图2 PH 检测电路     其中LM2 660M为开关电容转换器[12],可将输出电压稳定在1.5~5.5V范围内,这是电压信号的最佳状态。CA3104AMZ运算放大器可以将微弱的mV电压信号放大,它是结合了高压PMOS晶体管和高压双极晶体管在单片芯片上优点的产品,可以给电路提供一个特别高的输入阻抗以及特别低的输入电流,同时它还有特别高的效率。     输出信号的比值关系为59.16 mV/pH,在25℃时0V单片机接收到的pH为7。pH探头输出的信号大小与温度成比例关系,液体温度越高影响越大,R6电阻的作用是温度补偿。从pH=7开始,集成放大器CA3104AMZ将接收到的探头信号放大,输出电压为正负100 mV/pH的信号。然后第2级反相和偏置运放TL081BCDG4的作用是调整探头输出信号,使信号在一个有效的区间内,使输出信号能一直与pH成比例关系。D1是静电保护二极管也是通电指示灯,R5的作用是在温度补偿不足时根据标准液手动调节输出大小。pH值检测电路由J2端口输出电压Vout为:     式中:Vin为pH电极的输出信号即BNC端口电压信号,VD1为D1的稳定电压均值。       1.3TDS检测电路设计     本文设计采用数字TDS水质传感器,其电路原理图3所示,内部集成高精密放大电路、温度测量校准电路和低压差线性稳压电路。温度一直是影响pH值测量的重要因素,pH的精度和测量长期稳定性大部分是由温度决定的,因此本设计在AD采集电路中设计了预处理电路,具有低温漂、高稳定性和高精度的特点。   采用的是低偏置电流、低失调漂移信号放大器LMV324,LMV324四路低电压轨至轨输出运算放大器是专门为低压操作而设计的,它有4个频道数,典型偏移量5μV,输入偏置电流最大值250 000pA,共模抑制比65dB。TPS60400DBVR电荷泵为放大电路提供负输入电压,它可以将1.6~5.5V的输入电压直接转置为固定的负输出电压[13]。     由于它可以接受输入电压范围较大,一般只要有5或3.3V的预置整理电源供电,本文设计直接由模块上的VCC供电。ME6206A30M3G是一种低压差线性稳压芯片,它具有高精度、低功耗的特点,它能提供具有显著小电压降的电流,它将输入的5V电压降为3V后线性稳定输出给放大电路。探针的信号由J1端口流入,信号放大整理后J2端口输出到单片机。     2,系统软件程序设计   主程序部分采用顺序结构,程序启动后进行初始化,然后通过串口迅速进行温度采集,温度返回后数字型数据采集模块pH模块、TDS模块开始检测,随后进行AD采样变换为模拟输入量,并进行标度变换对数据做进一步处理。数据采集处理结束后将数据显示到OLED屏幕,然后将数据暂存到数据发送寄存器中,通过ESP8266模块WiFi信号发送至手机App。主程序流程如图4所示。     图3 TDS检测电路   图4系统主流程     2.1延时子程序设计     由于TDS和pH采样需要温度补偿,之后还要进行ADC采样及标度变换,所以在系统采集到温度之后需要一定的延时来等待TDS和pH的显示,因此设计了延时子程序来缓冲等待这一过程。24 MHz主频下在示波器上看一个语句的时间大概是0.8μs,本设计首先设了0.8μs的倍数4μs,再用函数将其增加至1ms,最终延时1s。在系统供电之后直接读取温度,延时1s后读取ADC采样数据。     2.2OLED显示程序设计     本文设计使用的是OLED显示器,与单片机的接口采用了I2C连接方式,在设计程序时需要根据连接方式进行。在程序开始执行之后首先初始化屏幕,然后开始写入数据或命令,数据标志表示为0,命令的标志表示为1。而后开始读取数据,数据读取之后还要设置以下显示参数:页地址、显示位置列低和列高地址、起点坐标、显示模式等。显示完成后关闭OLED进入清屏函数,清屏完成后屏幕是黑色的,和未通电点亮时一样。     2.3无线通信设计   为了实现最终的智能化水质检测,使人们在手机上能对日常用水的水质实时了解,采用无线通信的方式完成手机App在线监测。本设计采用专用的ESP8266模块实现联网与云端进行数据传输[14-15],由机智云平台可以提供手机端App的设计。       首先要在机智云开发者中心注册一个机智云的开发者账号,注册完成后选择个人项目创建一个新产品,填写一些基本的信息,产品的名称是“智能水质检测仪”,技术方案为WiFi/移动网络方案,保存之后就会产生项目的基本信息;其次,创建数据节点,考虑到主要检测水质的3个参数,本设计创建了3个数据点,设置3个节点名称分别是温度、pH和TDS;     再次,在手机上安装机智云通用版本的App,安装完成后登陆个人账号,在机智云官网下载ESP8266模块专用固件,专用固件在数据节点创建创建完成后即可下载使用,固件下载完成后,使用串口调试器将WiFi模块连接到电脑上,使用固件自带的下载程序刷新固件,并对机智云固件进行装载,装载完成后,WiFi成为基于机智云手册的无线透传模块;最后,设备与App通信时,需要先连接到机智云服务器,等待服务器传输回来的数据,当产品配置完成后,发送生成的PK代码和密钥,服务器对产品进行检测后,系统可以传输温度、pH、TDS等信息来实现数据上传,上传完成后接入网络的手机App即可读取数据。   3,硬件调试结果     为了验证上述设计的正确性和可行性,搭建硬件调试平台。为了防止硬件损害和测试的方便性,系统上电调试时将DS18B20、pH电极和TDS探针都插入了自来水溶液中,如图5(a)所示,水质温度、TDS及pH参数值分别为22.3、99和6.85,从中可知,生活中的自来水温度、TDS及pH值参数在人们健康范围内,是达标的;当改变水质pH值,再次测量,结果如图5(b)所示,水质参数分别为22.2、102及8.95,由于无预热及制冷,水温基本没有发生变化,但是水质的pH值明显发生了改变,从而引起了水质TDS的变化。     由显示结果可知,该系统测试结果准确;最后,为了实现可手持监测,通过WiFi模块联网与手机端App同步显示,即在手机接入系统WiFi之后打开手机App,通信结果如图6所示。经过实际的操作验证,本设计实现了硬件系统与手机App同步显示测量结果,与市场现有水质测试仪相比,该测试仪体积小、操作简单、成本低,且迎合当前用户潮流需求,将测试结果由手机APP进行实时查看,实现了线下线上同时监测,满足用户对智能型水质检测仪的需求。     图5 系统测试   图6手机app   4,结论 本文阐述了一种便携式智能水质检测仪的设计。介绍了pH检测电路、TDS检测电路等主要硬件的结构、工作原理,及软件程序设计中的核心子程序,最后通过硬件平台的测试,验证了该检测仪具有体积小、成本低、可携带、实时显示等多种功能,从实时应用角度出发,方便了人们对水质状况的实时在线检测需求,具有广泛的市场应用前景。

  • 发表了日志: 基于机智云的一种智能水质检测仪设计

  • 2022-01-18
  • 发表了主题帖: 基于ESP8266 WIFI网络控制和机智云的智能家居管控

    本帖最后由 毛球大大 于 2022-1-18 16:52 编辑 随着基于诸多物理原理的传感器和物联网技术的发展,智能家居正以各种各样的方式进入并快速改善着人们的生活质量。本系统利用ESP8266串口WIFI模块、机智云Aiot开发平台及单片机控制系统设计出一套手机APP和WIFI网络的智能家居管控系统。利用各种物理传感器采集家居环境信息并推送给用户,用户通过APP可以实时控制家用电器的工作状态。   1 系统总体设计     通过STM32F103ZET6单片机采集电压电流传感器、温湿度传感器、烟雾传感器的信号数据,将所采集数据经WIFI模块发送给用户终端,用户通过终端反馈的信息监测家庭环境的各项指标是否异常,控制家用电器的实时工作状态,从而完成对家庭环境的智能化管理.该系统也可根据采集信息语音控制家用电器状态,并将家用电器状态和居家环境信息在LCD显示屏上进行显示.整个系统的框架如图1所示。   图1系统总体框图     2 系统工作流程   智能家居管控系统的工作流程图如图2所示,该系统以STM 32F103ZET6单片机为核心,通过采集各个传感器数据,分析各用电器是否处于正常工作状态,经WIFI模块将家居信息传递给用户终端。当检测出异常,如火灾、下雨未关窗、用电器出现短路等现象时,系统通过数据分析将自动向用户手机发出警报,协助用户处理突发现象.同时,用户也可以根据信息或意愿来改变家用电器工作状态,实现智能家居管控。     图2系统工作流程图     3,语音控制设计   为了提高系统的实用性和方便程度,本系统还设计了类似于“小爱同学”的语音助手。该语音助手采用SYN7318语音交互模块,将所采集的语音信息转化为对应的指令编号传送回系统进行相应控制.在使用时,用户先要喊出系统设定的语音控制代码“小爱同学”进入语音控制模式,然后在30s内对系统喊出操作命令如“关灯”指令,该指令被SYN7318识别后,与数据库内语音指令进行比较,匹配完成后即可实现语音操控功能。     4 传感器探究及其电器状态检测设计     在日常生活中,家用电器往往使用的是交流电,而我们控制系统中使用的单片机只能采集一定范围内的直流电压,因此,我们需要将交流电流转换为合适范围内的直流电压.我们利用电磁互感原理采集交流电流,电流互感器是一种非接触式的电流传感器,电流互感器是根据电磁感应原理,使被测电缆穿过空心线圈,当被测电缆的电流发生变化时,其周围产生的磁场也会同时发生变化,同时空心线圈的磁通量发生变化,磁通量的变化就会使次级回路产生小交流电流,然后利用高精度采样电阻对二次电流采样后,通过有源整流电路对采样电压进行整流、放大后,即可变成我们所需要范围内的直流电压信号,电流检测流程图如图3所示。   图3 电流检测流程图     5 智能产品互联设计     智能家居管控模型效果图如图4所示,系统选用WIFI模块作为沟通云端服务器的桥梁.在系统运行过程中,需要实时和服务器保持连接,不断将MCU获取到的信息传送至云端服务器上,还需要从云端服务器上获取手机APP发送的控制指令.只有保持WIFI模块的正常工作,才能保持整个系统的正常运行,本系统采用了ESP8266串口WIFI模块,其广泛应用于物联网领域,具有能耗低、烧写固件方便、传输数据快、支持AT语言、体积小、价格便宜等特点。   本系统中将ESP8266串口WIFI模块作为从机配合MCU工作,该模块只作为通信模块使用.系统借助于机智云物联网平台提供的通信协议就能够实现模块与机智云云端服务器的连接,只需要将机智云开发平台提供的固件刷入ESP8266串口WIFI模块的Flash中就能够实现网络连接的功能。     图4 智能家居管控模型效果图     6 用户APP开发     本系统需要对APP和互联网服务器进行搭建开发,但是这对于本科阶段是比较困难的,所以我们选用集成度高、易开发的机智云物联网开发平台。使用该平台的通信协议,可以轻松完成服务器和设备之间的数据交换。同时,机智云AIoT开发平台也向开发者提供了开源的参考手机APP代码框架,开发者可以在此基础上设计适合使用的手机APP。     在系统运行过程中,用户可以通过该APP将控制信号发送至服务器,随后服务器将信号发送至设备,实现了随时随地对家用电器的控制。不仅如此,APP上还可以实时显示家用电器状态,方便用户根据信息对家居环境进行调整。机智云AIoT开发平台为我们提供了很好的物联网方案,让我们很轻松地实现了APP和设备之间的数据交换,极大地减轻了智能家居管控系统的设计难度。   7 结束语   利用传感器采集技术、无线通信技术,借助机智云物联网开发平台,设计出一套基于手机APP和WIFI网络的智能家居管控系统.该系统将基本的家用电器通过WIFI模块与互联网连接,对居家环境进行实时监测和家用电器进行实时调控,实现了对家用电器和居家环境的智能化管理。

  • 2022-01-17
  • 发表了主题帖: 开源教程:基于ESP8266和机智云的智能雨林缸,成本低、高智能

    项目内容: 1.灯光控制 2.循环控制 3.温度采集 4.温度和喷淋自动控制(手动控制下加热和喷淋可控,自动模式下加热和喷淋不可控) 5.状态断电记忆     云端部署: 本次设计以esp8266作为主控,SOC方案,利用赛博坦工具快速生成APP。 1.创建产品, 进入开发者中心,点击右上角,创建新产品,按照如图所示创建新的产品。   2.创建数据点。 3.生成ESP8266_32M SOC代码,下载到电脑备用。 4.由左上角的体验新版本切换到新版本开发者中心,点击右上角+创建一个新的移动应用。 5.点开创建好的应用,关联设备到移动应用里面。其他参数根据自己需求进行更改 6.回到新版本主页,在左侧选择自己创建的产品,然后进行模组配置。配置成乐鑫模组,注意只需要修改模组就行,热点参数无需更改。 7.进入应用页面,进行控制页面修改。 8.根据自己需求设置好控制模块的大小以及图标。其余参数根据自己的需求修改。级的每个页面都需要保存。 9.配置好所有参数过后,回到之前创建的移动应用里面,进行应用的构建,构建成功以后扫描后面的二维码下载安装到手机,到此云端部署完成。     硬件接线: 此项目不公开PCB,可以自己购买4路继电器,及防水温度传感器DS18B20探头,ESP12S小系统板。 继电器----GPIO13(加热管)GPIO12(循环电机)GPIO16(喷淋电机)GPIO5(灯光) 配网按键----GPIO14(按下低电平) 温度传感器----GPIO4(传感器需要上拉电阻)   程序修改:        1.本次采用IDE方式进行开发编译(开发环境链接:https://pan.baidu.com/s/1TTIU-74mBxo9UqxLbX7Grw 提取码:0htq,解压过后即可使用,路径不能有中文),将前面下载的代码进行解压,路径不要含有中文。在IDE环境里面导入项目。导入步步骤易出错,注意根据下图中所示步骤进行导入。        2.修改编译参数,打开根目录下面的Makefile文件,然后修改23到27行的内容。(注意:本教程代码不可以在网页上进行复制粘贴,由于编码不一致可能会导致程序不能编译,无法编译需要重新解压代码从头再来。代码需要自己手打。每次输入代码过后需要保存以后编译才会生效。) BOOT?=new APP?=1 SPI_SPEED?=40 SPI_MODE?=QIO SPI_SIZE_MAP?=6 复制代码        3.按键部分无需修改,因为自动生成的代码就是gpio14按键长按短按进行网络配置。继电器引脚的初始化我们写在按键函数的初始化里面, 初始化为输出模式。 GPIO_OUTPUT_SET(GPIO_ID_PIN(5),1);//灯光     GPIO_OUTPUT_SET(GPIO_ID_PIN(13),1);//加热管     GPIO_OUTPUT_SET(GPIO_ID_PIN(12),1);//循环电机     gpio16_output_conf();//喷淋电机 复制代码 4.在gizwits_product.c和gizwits_product.h增加全局变量。 //flash相关 #define sec 137 //137扇区,程序小于480K flash存储的安全区域的起始地址137-1024扇区 #define sec1 138 //138扇区,程序小于480K flash存储的安全区域的起始地址137-1024扇区 bool STATE[6] = {0,0,0,0,0,0};//开机各个开关状态标识 uint32_t Set_Temp=0;   //温度自动控制 uint32_t Open_Time=0;       //喷淋开时间 uint32_t Off_Time=0;    //喷淋关时间 extern bool STATE[6];   //开机各个开关状态标识 extern uint32_t Set_Temp;    //温度自动控制 extern uint32_t Open_Time; //喷淋开时间 extern uint32_t Off_Time;     //喷淋关时间 复制代码        5.在gizwits_product.c的gizwitsEventProcess函数里面对开关状态进行缓存。程序带有注释,此处不做截图,具体参考下面的程序更改。(注意:此函数的是数据点下发过后,可写类型的数据处理,会根据数据点的不同而不同。程序不能再网页复制,会导致编码不一致程序出错) int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len) {     uint8_t i = 0;     dataPoint_t * dataPointPtr = (dataPoint_t *)data;     moduleStatusInfo_t * wifiData = (moduleStatusInfo_t *)data;     if((NULL == info) || (NULL == data))     {         GIZWITS_LOG("!!! gizwitsEventProcess Error \n");         return -1;     }     for(i = 0; i < info->num; i++)     {         switch(info->event)         {         case EVENT_Water_Cycle :             currentDataPoint.valueWater_Cycle = dataPointPtr->valueWater_Cycle;             GIZWITS_LOG("Evt: EVENT_Water_Cycle %d \n", currentDataPoint.valueWater_Cycle);             if(0x01 == currentDataPoint.valueWater_Cycle)             {                    STATE[0]=1;   //水循环打开             }             else             {                    STATE[0]=0;   //水循环关闭             }             STATE[6]=1;//flash存储状态             break;         case EVENT_Spray :             currentDataPoint.valueSpray = dataPointPtr->valueSpray;             GIZWITS_LOG("Evt: EVENT_Spray %d \n", currentDataPoint.valueSpray);             if(0x01 == currentDataPoint.valueSpray)             {                    if(STATE[4]==0)                             {                           STATE[2]=1;   //如果为手动模式,喷淋开关打开,否则不动作                           STATE[6]=1;//flash存储状态                             }             }             else             {                    if(STATE[4]==0)                    {                           STATE[2]=0; //如果为手动模式,喷淋开关关闭,否则不动作                           STATE[6]=1;//flash存储状态                    }             }             currentDataPoint.valueSpray = STATE[2];//更新数据点,APP更新             break;         case EVENT_Lamp :             currentDataPoint.valueLamp = dataPointPtr->valueLamp;             GIZWITS_LOG("Evt: EVENT_Lamp %d \n", currentDataPoint.valueLamp);             if(0x01 == currentDataPoint.valueLamp)             {                    STATE[1]=1;   //灯光打开             }             else             {                    STATE[1]=0;   //灯光关闭             }             STATE[6]=1;//flash存储状态             break;         case EVENT_Heating :             currentDataPoint.valueHeating = dataPointPtr->valueHeating;             GIZWITS_LOG("Evt: EVENT_Heating %d \n", currentDataPoint.valueHeating);             if(0x01 == currentDataPoint.valueHeating)             {                    if(STATE[4]==0)                    {                           STATE[3]=1;   //如果为手动模式,加热开关打开,否则不动作                           STATE[6]=1;//flash存储状态                    }             }                      else                      {                             if(STATE[4]==0)                             {                                    STATE[3]=0; //如果为手动模式,加热开关关闭,否则不动作                                    STATE[6]=1;//flash存储状态                             }                      }                      currentDataPoint.valueHeating = STATE[3];//更新数据点,APP更新             break;         case EVENT_mode:             currentDataPoint.valuemode = dataPointPtr->valuemode;             GIZWITS_LOG("Evt: EVENT_mode %d\n", currentDataPoint.valuemode);             switch(currentDataPoint.valuemode)             {             case mode_VALUE0:                    STATE[4]=0;   //手动模式                 break;             case mode_VALUE1:                    STATE[4]=1;   //自动模式                 break;             default:                 break;             }             STATE[6]=1;//flash存储状态             break;         case EVENT_Set_Temperature:             currentDataPoint.valueSet_Temperature= dataPointPtr->valueSet_Temperature;             GIZWITS_LOG("Evt:EVENT_Set_Temperature %d\n",currentDataPoint.valueSet_Temperature);             Set_Temp = currentDataPoint.valueSet_Temperature;     //缓存设置温度             STATE[6]=1;//flash存储状态             break;         case EVENT_Spray_Open_Time:             currentDataPoint.valueSpray_Open_Time= dataPointPtr->valueSpray_Open_Time;             GIZWITS_LOG("Evt:EVENT_Spray_Open_Time %d\n",currentDataPoint.valueSpray_Open_Time);             Open_Time = currentDataPoint.valueSpray_Open_Time;//缓存设置开时间             STATE[6]=1;//flash存储状态             break;         case EVENT_Spray_Off_Time:             currentDataPoint.valueSpray_Off_Time= dataPointPtr->valueSpray_Off_Time;             GIZWITS_LOG("Evt:EVENT_Spray_Off_Time %d\n",currentDataPoint.valueSpray_Off_Time);             Off_Time = currentDataPoint.valueSpray_Off_Time;//缓存设置关时间             STATE[6]=1;//flash存储状态             break; 复制代码 6. 接下来我们处理断电开机之后开关以及各项参数的初始化。主要是利用flash读取获取参数。数据状态存放在flash,后续教程及程序会有存储体现。初始化主要修改userInit函数。 void ICACHE_FLASH_ATTR userInit(void) {     gizMemset((uint8_t *)¤tDataPoint, 0, sizeof(dataPoint_t));     //flash相关        uint32 value;        //定义数组addr_case1        uint8* addr_case1 = (uint8*)&value;//四字节对齐        uint8* addr_case2 = (uint8*)&value;//四字节对齐        //读取flash数据,sec*4*1024就是读取起始地址,就是具体的字节地址        spi_flash_read(sec*4*1024, (uint32*)addr_case1, sizeof(addr_case1));        spi_flash_read(sec1*4*1024, (uint32*)addr_case2, sizeof(addr_case2));        if(addr_case1[0]==1) STATE[0]=1;      //水循环               else STATE[0]=0;        if(addr_case1[1]==1) STATE[1]=1;      //灯光               else STATE[1]=0;        if(addr_case1[2]==1) STATE[2]=1;      //喷淋               else STATE[2]=0;        if(addr_case1[3]==1) STATE[3]=1;      //加热               else STATE[3]=0;        if(addr_case2[0]==1) STATE[4]=1;      //模式               else STATE[4]=0;        currentDataPoint.valueSet_Temperature = (uint32_t)addr_case2[1];        currentDataPoint.valueSpray_Open_Time = (uint32_t)addr_case2[2];        currentDataPoint.valueSpray_Off_Time = (uint32_t)addr_case2[3];        currentDataPoint.valueWater_Cycle = STATE[0];        currentDataPoint.valueSpray = STATE[2];        currentDataPoint.valueLamp = STATE[1];        currentDataPoint.valueHeating = STATE[3];        currentDataPoint.valuemode = STATE[4];        currentDataPoint.valueTemperature = 0;        Set_Temp = currentDataPoint.valueSet_Temperature;        Open_Time = currentDataPoint.valueSpray_Open_Time;        Off_Time = currentDataPoint.valueSpray_Off_Time;        GPIO_OUTPUT_SET(GPIO_ID_PIN(12),!STATE[0]);//水循环        GPIO_OUTPUT_SET(GPIO_ID_PIN(5),!STATE[1]);//灯光 } 复制代码   7.在gizwits_product.c新增DS18B20驱动函数。由于程序太长此处不再截图。 /************************ * 函 数 名         : Ds18b20Init * 函数功能            : 初始化 * 输    入         : 无 * 输    出         : 初始化成功返回1,失败返回0 ************************/ uint8 Ds18b20Init() {        int i;        PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);        GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);            //将总线拉低480us~960us        os_delay_us(642);         //延时642us        GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);     //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低        while (GPIO_INPUT_GET(GPIO_ID_PIN(4))) //等待DS18B20拉低总线        {               os_delay_us(500);               os_delay_us(500);               i++;               if (i > 5)   //等待>5MS                             {                      return 0;  //初始化失败               }        }        return 1;  //初始化成功 } /************************ * 函 数 名         : Ds18b20WriteByte * 函数功能            : 向18B20写入一个字节 * 输    入         : dat * 输    出         : 无 ************************/ void Ds18b20WriteByte(uint8 dat) {        int i, j;        for (j = 0; j < 8; j++) {               GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);                 //每写入一位数据之前先把总线拉低1us               i++;               GPIO_OUTPUT_SET(GPIO_ID_PIN(4), dat & 0x01);                //然后写入一个数据,从最低位开始               os_delay_us(70); //延时68us,持续时间最少60us               GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);     //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值               dat >>= 1;        } } /************************ * 函 数 名         : Ds18b20ReadByte * 函数功能            : 读取一个字节 * 输    入         : 无 * 输    出         : byte ************************/ uint8 Ds18b20ReadByte() {        uint8 byte, bi;        int i, j;        for (j = 8; j > 0; j--) {               GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);     //先将总线拉低1us               i++;               GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);       //然后释放总线               i++;               i++;   //延时6us等待数据稳定               bi = GPIO_INPUT_GET(GPIO_ID_PIN(4));    //读取数据,从最低位开始读取               /*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/               byte = (byte >> 1) | (bi << 7);               os_delay_us(48); //读取完之后等待48us再接着读取下一个数        }        return byte; } /************************ * 函 数 名         : Ds18b20ChangTemp * 函数功能            : 让18b20开始转换温度 * 输    入         : 无 * 输    出         : 无 ************************/ void Ds18b20ChangTemp() {        Ds18b20Init();        os_delay_us(500);        os_delay_us(500);        Ds18b20WriteByte(0xcc);             //跳过ROM操作命令        Ds18b20WriteByte(0x44);         //温度转换命令 //     延时100ms 等待转换成功,而如果你是一直刷着的话,就不用这个延时了 } /************************ * 函 数 名         : Ds18b20ReadTempCom * 函数功能            : 发送读取温度命令 * 输    入         : 无 * 输    出         : 无 ************************/ void Ds18b20ReadTempCom() {        Ds18b20Init();        os_delay_us(500);        os_delay_us(500);        Ds18b20WriteByte(0xcc);      //跳过ROM操作命令        Ds18b20WriteByte(0xbe);     //发送读取温度命令 } /************************ * 函 数 名         : Ds18b20ReadTemp * 函数功能            : 读取温度 * 输    入         : 无 * 输    出         : temp ************************/ float Ds18b20ReadTemp() {        float temp = 0;        uint8 tmh, tml;        uint32_t temp1;        Ds18b20ChangTemp();                    //先写入转换命令        Ds18b20ReadTempCom();                 //然后等待转换完后发送读取温度命令        tml = Ds18b20ReadByte();          //读取温度值共16位,先读低字节        tmh = Ds18b20ReadByte();         //再读高字节        temp1 = tmh;        temp1 <<= 8;        temp1 |= tml;        temp = temp1*0.0625;        temp = ((temp+0.005)*100)/100;//保留2位小数,四舍五入        return temp; } 复制代码 在gizwits_product.c新增温度传感器的函数**。 uint8 Ds18b20Init(); void Ds18b20WriteByte(uint8 dat); uint8 Ds18b20ReadByte(); void Ds18b20ChangTemp(); void Ds18b20ReadTempCom(); float Ds18b20ReadTemp(); 复制代码        8.在gizwits_product.c的userHandle函数里面对GPIO输出点,温度采集,flash存储以及逻辑控制进行编写。此处不在截图。 void ICACHE_FLASH_ATTR userHandle(void) {        //flash相关        uint32 value;        //定义数组addr_case1        uint8* addr_case1 = (uint8*)&value;        uint8* addr_case2 = (uint8*)&value;        LOCAL float tempvalue;//采集温度        LOCAL uint32_t opentime=0;//开计时        LOCAL uint32_t offtime=0;//关计时        LOCAL bool onoff=0;//开关状态,0关,1开        os_delay_us(642);        LOCAL uint8_t temp_time=0;//温度采集间隔时间        if(temp_time<=1)temp_time++;        else        {               temp_time=0;               tempvalue = Ds18b20ReadTemp();               currentDataPoint.valueTemperature = tempvalue;        }        if(STATE[4])//自动模式下喷淋和加热控制        {               //加热温度控制               if(tempvalue<(float)Set_Temp) STATE[3]=1;                      else STATE[3]=0;               //喷淋控制               if(onoff)//开状态               {                      if(opentime>0) opentime--;                      else                      {                             onoff=0;//切换关状态                             offtime=Off_Time*60;//赋值关闭时间                             STATE[2]=0;                      }               }               else if(onoff==0)//关状态               {                      if(offtime>0) offtime--;                      else                      {                             onoff=1;//切换开状态                             opentime=Open_Time*60;//赋值打开时间                             STATE[2]=1;                      }               }               gpio16_output_set(!STATE[2]);//喷淋               GPIO_OUTPUT_SET(GPIO_ID_PIN(13),!STATE[3]);//加热               currentDataPoint.valueSpray = STATE[2];               currentDataPoint.valueHeating = STATE[3];        }        else //手动模式        {               GPIO_OUTPUT_SET(GPIO_ID_PIN(13),!STATE[3]);//加热               gpio16_output_set(!STATE[2]);//喷淋        }        if(STATE[6]==1)     //状态改变        {               STATE[6]=0;//清除状态               GPIO_OUTPUT_SET(GPIO_ID_PIN(12),!STATE[0]);//水循环               GPIO_OUTPUT_SET(GPIO_ID_PIN(5),!STATE[1]);//灯光               //flash存储数据前转换数据               addr_case1[0] = (uint8)STATE[0];               addr_case1[1] = (uint8)STATE[1];               addr_case1[2] = (uint8)STATE[2];               addr_case1[3] = (uint8)STATE[3];               addr_case2[0] = (uint8)STATE[4];               addr_case2[1] = (uint8)currentDataPoint.valueSet_Temperature;               addr_case2[2] = (uint8)currentDataPoint.valueSpray_Open_Time ;               addr_case2[3] = (uint8)currentDataPoint.valueSpray_Off_Time;               //擦除要写入的Flash扇区               spi_flash_erase_sector(sec);               //写入数据,sec*4*1024就是写入起始地址,就是具体的字节地址               spi_flash_write(sec*4*1024, (uint32*)addr_case1, sizeof(addr_case1));               //擦除要写入的Flash扇区               spi_flash_erase_sector(sec1);               //写入数据,sec*4*1024就是写入起始地址,就是具体的字节地址               spi_flash_write(sec1*4*1024, (uint32*)addr_case2, sizeof(addr_case2));        }     system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0); }      复制代码 9.修改完代码之后ctrl+B进行编译固件编译。 10.利用乐鑫烧录软件将生成的固件烧录到ESP8266里面。参数参考下图,注意参数不能有错。下载硬件接线如下表下载模式。记住通电瞬间就要保持这个状态才是下载模式。 11.程序烧录完成之后通过按键长按触发airlink配网(或短按触发softap配网),在APP选择对应的配网进行网络配置及绑定设备。绑定后进入设备即可进行采集和控制 12.实物展示展示   https://v.youku.com/v_show/id_XNTgzNTI0NzIzMg==.html?spm=a2hbt.13141534.0.13141534  

  • 2022-01-11
  • 发表了主题帖: 基于机智云物联网平台的无人机电池电量监测系统

    本帖最后由 毛球大大 于 2022-1-11 15:25 编辑 摘要: 在对无人机电池管理的调查基础上,对无人机电池电量采集技术进行了研究。提出了一种通过实时监测无人机各个电池芯电压,判断无人机电池的使用状况、无人机电池的放电平衡状态及无人机电池的剩余电量的监控系统设计。在故障发生前,进行实时报警,从而避免由于电池性能问题,造成无人机损坏,对无人机电池管理技术具有重要的实际应用意义。   随着无人机技术的普及,无人机产业将由现有的单一测绘航测,转型为应用于交通、物流、矿产、电力、水利、农业、娱乐等多个领域[1]的产业,可以说无人机服务已经进入人们的日常生活。但是在无人机电池的管理上,一直存在着比较大的安全隐患[2]。由于目前无人机电池电量采集技术的相对落后,一旦因为电池电量不足而引起无人机坠毁,将会造成不可估量的损害。因此,及时有效地监测无人机电池的剩余电量,并在故障发生之前,进行实时报警并自救显得尤为重要。     1 系统整体功能设计及各子模块功能说明     本设计是一款基于STM32单片机的无人机电池性能实时线上监测系统。采用AD采集模块进行无人机电池监测,且连接简单,拆卸方便,在不破坏原有无人机电池结构的基础上,提高无人机飞行的安全性。该设计采用在线测量方式,在无人机飞行过程中实时监测无人机电池状态,能及时准确地掌握无人机电池的性能,快速有效地根据无人机电池状态控制无人机的飞行状态。   同时无人机电池工作状况可以实时上报云端,相当于飞行器“黑盒子”数据实时备份到云端,从而进行无人机电池的线上监视,观察无人机电池电量,并及时报知各芯电压状态,保证无人机正常飞行;该装置也可以对其他多芯锂电池的各芯电压状态进行监测,及时报告无人机电池组的状态,确保设备正常运行。     因此,本装置可以应用于缺少电池监视的无人机系统,以保证无人机的安全,具有很好地发展前景和实际应用意义。     1.1系统整体功能设计     为了在线有效地对无人机电池电量进行实时线上监测,系统功能需要由多个子模块协作完成。通过对本系统的整体功能进行分析可以得出,无人机电池性能监测系统主要由STM32主控模块、无人机飞行器、电池采样模块、液晶显示模块及无人机控制模块等共同组成。系统整体原理图如图1所示。   图1 系统整体原理图   1.2各子模块功能说明 1.2.1 STM32主控模块     STM32主控模块采用STM32F407VET6单片机芯片,运算速度快、集成度高、扩展性强,负责对采集模块的数据进行处理,根据各电池芯电量状态,实时采取相应的控制;本装置无人机电池采用3芯供电,总电压标准值11.1 V,满冲状态12.6 V,设置保护门限电压为3.6 V,当无人机电池有一芯电压低于3.6 V时,保护装置就会启动,提示无人机尽快降落,避免坠机风险。     1.2.2 液晶显示模块     液晶显示模块是实现人机交互的重要方式,可以彩色显示各种信息、清晰度高、功耗低,是常用的显示设备。另外,此电阻式触摸屏性能优良、价格低廉,可以作为良好的人机交互界面。本系统采用了自行设计的电阻触摸屏,利用2.8寸彩色TFTLCD液晶触摸屏作为系统的人机交互设备,可用于显示工作状态及各电池芯电压状态以及是否亏电情况,且便于调试工作,也可以在无人机飞行时去掉该模块,来减轻无人机自身重量。     1.2.3 电池采样模块     电池采样模块用于采集无人机电池各芯的电压信息,该模块采用大电阻分压电路,电路简单可靠、功耗低、成本低。     1.2.4 无人机控制模块     无人机控制模块采用声音、光电信号,用于提示无人机电池电压不足或者单芯出现故障等情况。本系统通过esp8266进行云端连接,实现数据上传云端,方便远程监控工作状态;控制指令可以通过云端下达,实现远程控制。     2   系统程序设计   系统在进入工作模式之后,首先程序进行初始化,分别设置中断优先级与系统时钟,然后设置串口1与串口3的波特率、数据位、停止位、奇偶校验、收发等硬件信息,串口1用来进行调试信息,串口3发送无人机电池测试数据;LED初始化,LED用来指示程序运行状态;LCD初始化,LCD是界面显示电芯测试信息,为了显示汉字设置W25Q存放汉字库;W25Q初始化,完成汉字库读写测试;   按键初始化,ADC初始化,ADC输入端连接电芯采样电路,采集电芯电压变化信息;机智云物联网平台初始化,监测装置通过ESP8266连接机智云平台,设置机智云对无人机电芯监测装置的采集数据点,数据传输方式、数值类型、读写控制等,获取该设备的Product Key和Product Secret秘钥。     初始化工作准备就绪后,本装置连接到机智云物联网平台,可以实时上传监测数据,如果硬件存在问题,则输出错误信息,等待故障排除与复位。正常飞行时为了减轻重量可以不接LCD屏,LCD屏用于程序调试方便信息显示,液晶屏输出电池信息。采样电路获取电池电压,该模拟量输入到ADC电路,转换成数字信息,可以上传到机智云,方便查询与记录,用户可以通过电脑端分析电芯数据,也可以通过手机APP实时获取电芯状态。将测得的数据与设定值进行对比,如果电压低于设定值,就报警,提示用户电池处于亏电状态,及时降落无人机;如果电芯电压正常就进入循环状态,继续监测。     系统的主程序流程图如图2所示。     图2 系统主程序流程图     系统主程序重要代码为: adcx1=Get_Adc_Average(ADC_Channel_3,20);LCD_ShowxNum(134,130,adcx1,4,16,0); if(adcx1<4096/3.3*3.8/6.17) LCD_ShowString(30,70,200,16,16,"voltage1is bad "); Else LCD_ShowString(30,70,200,16,16,"voltage1is good"); temp1=(float)adcx1*(3.3/4096)*6.17; adcx1e=temp1; LCD_ShowxNum(142,150,adcx1e,1,16,0); temp1-=adcx1e; temp1*=1000;LCD_ShowxNum(158,150,temp1,3,16,0X80); delay_ms(250); adcx2=Get_Adc_Average(ADC_Channel_4,20);LCD_ShowxNum(142,170,adcx2,4,16,0); if(adcx2<4096/3.3*7.6/6.17) LCD_ShowString(30,90,200,16,16,"voltage2is bad "); Else LCD_ShowString(30,110,200,16,16,"voltage3is good");   temp3=(float)adcx3*(3.3/4096)*6.11; adcx3e=temp3;LCD_ShowxNum(134,230,adcx3e,2,16,0); temp3-=adcx3e; temp3*=1000;LCD_ShowxNum(158,230,temp3,3,16,0X80); delay_ms(250);     3,关键性能指标及整机完成结构图   3.1 关键性能指标     本设计有以下四个关键性能指标: (1)无人机电池测量装置连接无人机电池充电接口,对每一个电池芯状态进行采样,得到无人机电池的数据,计算无人机电池的剩余电量和剩余使用时间。   (2)各个无人机电池的电芯电压经过AD转换,与设置阈值电压进行比较,根据电压状态确定无人机飞行状态,确保电量降低到一定程度或电芯电压低于阈值时采取安全措施,确保无人机安全降落。   (3)无人机电池在线监控系统,将无人机电池信息通过无线收发模块,发送至地面监控装置,无人机操作人员可以及时有效地掌握电池工作状态。   (4)机载显示模块显示电池状态,便于直观查看电芯信息,为了减轻飞行重量,显示模块采用扩展挂载方式,可以去掉显示模块。   3.2 整机完成结构图 整机完成结构图如图3所示,其中包含当前无人机电池的电量等相关采集数据。   图3 整机完成结构图     4主要创新点与可扩展之处 4.1 主要创新点   本设计有以下四个主要创新点:   (1)本系统对各电芯分别取样测量,实时监测电池各个电芯,无人机飞行控制器自带的电池电压是测量各个电芯串联的总电压[3],单独测量各个电芯电压更能准确反映电池性能状态,如有一个电芯性能降低或者失效[4],电池保护系统就会启动[5],确保无人机飞行安全。 (2)无人机电池充电接口作为采样点,连接简单,不破坏电池原有结构。   (3)机载显示模块做成可拆卸结构,方便使用,便于减轻无人机的飞行重量。   (4)加入了机智云管理系统,可以线上监控电池电量,保证在无人机安全电量不足时会发出警告。     4.2 可扩展之处     本设计有以下三个可扩展之处:   (1)该设计采用声音、灯光提示无人机电池电量不足或者单芯电压低于门限值,应该采取保护措施,将来可以升级为接入无人机图传或者Wi-Fi发送给驾驶员。   (2)采用更精准的取样电路,进一步提高采样精度,可以加上接口反接保护措施,避免烧毁电路。   (3)可以设计成小电路板结构,降低重量,有利于增加无人机的飞行时间。   5 结 论   本装置设计了一款基于STM32单片机的无人机电池性能实时线上监测系统。该系统可以通过实时监测无人机各个电池芯电压情况,来判断电池使用状况及电池放电平衡状态,且能实时监测电池的剩余电量,在故障发生之前,进行实时报警,从而避免由于电池性能问题造成的无人机损坏。   该装置通过进行多次实验模拟,能够实时采集无人机电池的电量信息,并根据数据设置相应的阈值,采取相应的措施。故本系统可以做到及时有效地预防无人机由于电池电量不足而导致的坠机问题,具有一定的市场前景和实际应用价值。

  • 2021-12-29
  • 发表了主题帖: 机智云智慧网关解决方案,实现不同品牌不同协议的互联互通

    本帖最后由 毛球大大 于 2021-12-29 14:36 编辑 现在市面上智能设备百花齐放,采用的通信协议各式各样,这些设备组合到一个智能家庭,能实现多种实用的场景联动,甚至是在家中WiFi不稳定或中断的情况下,网关也能通过实现用户预设的智能设备场景联动。   诸如: 打造专属离家模式,随手关门后智能门锁自动锁门,联动的室内灯关自动关闭,电动窗帘自动打开,太阳照射进来营造最佳体感温湿度,温湿度传感器自动监测室内温湿度,联动打开空调,保持室内人体最佳温湿度,告别南方的湿冷或炎热。   安心护家保障安全,水浸传感器、烟雾传感器自动监测家庭情况,网关通过手机APP或手机短信发送消息提醒。夜间起床,传感器监测到人体移动,小夜灯自动开灯,无需担心用手开灯晃眼,也不怕摸黑起夜了。   事实上,在这些智能场景的背后,有一个关键角色——智慧网关,有了智慧网关,实现智能设备间的场景联动。由于大都数品牌都有自己的护城河,市场上的智能设备协议复杂多样,不同品牌使用的协议不同,不同设备之间的协议也存在差异,因此大都数智能设备是无法进行直接通信的。需要借助智慧网关充当“中间人”,让不同品牌、不同协议的设备可以相互理解对话,实现云端交互。   那么智慧网关如何实现互联互通?   一般情况下网关通过Zigbee协议与其他子设备进行通讯连接。而机智云轻网关解决方案兼容多种协议,通过解决蓝牙、433、232、485、zigbee等无法直接接入广域网的产品的入网问题,去除设备之间的差异化,使用统一接口控制不同设备,实现不同智能设备间的场景联动。开发者不需要了解各个通讯方式的差异性,就能实现智慧网关的开发,而用户在使用智能设备、场景联动的过程中体验感不受影响。   此外,机智云物联网平台还提供语音控制接口,通过厂商只需进行在线配置调用国内外主流语音平台功能,实现用户语音控制智慧网关及其接入的子设备。诸如通过苹果“家庭”App和随时随地控制网关及其接入的子设备。   如何开发一款智慧网关?如何利用智慧网关搭建实用炫酷的联动场景?   第一步:在登陆dev.gizwits.com,创建一个网关产品。   第二步:创建子设备产品   第三步:轻网关方案数据点创建   当创建好子设备产品之后,可以根据子设备的产品功能,创建对应的数据点,例如子设备是一个蓝牙灯泡,具有开关,颜色以及亮度等功能,只需要在子设备产品下创建数据点即可,网关产品不需要。     第四步:获取轻网关方案   第五步:获取子设备产品的通讯串口协议,获取对应的协议进行下一步的开发     第六步:在线开发APP 厂商可以使用机智云的赛博坦工具在线配置开发、上线APP,构建自有品牌APP,以及进行App版本管理。用户下载厂商提供的APP后,可以预设自动化联动场景,让家庭变得更加智能温馨。   第七步:在线调用语音控制功能   机智云提供了国内外 7 大主流语音控制平台,帮助厂商快速实现产品的语音控制功能,助力产品上市和出海。AmazonAlexa(亚马逊Echo)、GoogleAssistant(谷歌音箱)、TmallAliGenie(天猫精灵)、BaiduDuerOS(百度-小度音箱)、XiaoMiIoT(米家-小爱音箱)、JDWhale(小京鱼-叮咚音箱)、IFTTT。厂商只需登录机智云物联网平台,选择“语音应用”,自助式选择对接的语音控制平台,即可让智能产品兼容性更强,产品体验更佳。

  • 2021-12-28
  • 发表了主题帖: 基于机智云物联网平台的空气质量多功能检测系统设计

    本帖最后由 毛球大大 于 2021-12-28 17:09 编辑 摘要: 目前市面上的空气质量检测仪通常只能检测少数几种气体,面对空气中多种有害气体,就要使用不同的检测仪器。针对现有检测系统功能不全等问题,开发了由STM32单片机、各类传感器、LCD显示屏和WiFi通信模块组成的多功能检测系统,并利用机智云物联网平台传输数据到用户终端。该检测系统能够实现对空气中的CO、CO2、PM2.5、TVOC、甲醛的含量以及温湿度进行实时监测,并具有超标报警功能。 1引言   空气中的有害物质直接影响人们的心身健康,室内空气的危害气体主要有CO、CO2、PM2.5、甲醛等[1]。温湿度对人的舒适度有较大影响,低湿度环境对人有多种不利影响[2-4]。因此,对空气中的有害气体及环境的温湿度进行检测是必要的,对人员密集、活动频繁的室内公共场所进行空气质量检测尤为重要。空气质量检测方法可以根据检测内容的不同进行设计。采用STC系列单片机可设计出室内温湿度、PM2.5颗粒物浓度检测方法[5]。   利用STM32单片机能实现对室内温湿度、PM2.5以及甲醛浓度检测,数据可采用蓝牙通信方式传输到手机[8],也可利用网络和Lo Ra(Long Range)无线通信技术实时地将检测结果上传至上位机[9]。上述方法对空气质量的检测主要对象是温湿度、PM2.5、CO、CO2甲醛浓度等,而且一台检测设备也难以完成这些目标的同时检测。在数据传输方面,蓝牙通信距离短、可靠性不高,Lo Ra无线通信技术系统较复杂,成本相对高。   实际上,空气中的有毒有害气体比较多,例如空气中的TVOC(TotalVolatile Organic Compounds总挥发性有机物,简称TVOC)对空气质量影响大,引起了人们的高度重视。因此,针对目前空气质量检测系统功能少的现状提出了一个新的设计方案,系统设计以STM32单片机为主控器,由有关功能传感器和Wi Fi无线通信模块组成,利用机智云和Wi Fi无线通信技术将数据传输到用户终端,实现数据共享。该方案可完成多种有害气体的检测,同时能对温湿度进行监测。   2 系统设计方案   空气质量检测系统可检测多种有害气体,对环境的温度、湿度能进行监测,检测到的数据信息可上传到机智云物联网云平台,并发送到用户终端,设计目标和技术指标如下:   2.1 设计目标与技术指标 2.1.1 设计目标   (1)   具有能够检测CO、CO2、甲醛、TVOC、PM2.5和温湿度检测功能。   (2)   能够在LCD屏上实时的显示相关检测数据。   (3)   利用Wi Fi无线通信技术上传数据到机智云物联网云平台。   (4)   能将数据发送到用户终端,实现用户手机及电脑等设备远距离传输。   (5)   具有对有害气体超标提示与报警功能。   2.1.2 主要技术指标 系统设计的技术指标如表1所示:   表1技术指标要求   2.2 系统组成与模块选型 2.2.1 系统组成   根据设计目标构建系统组成,如图1所示,系统主控制器为STM32,数据采集部分由二氧化碳(TVOC、温湿度)传感器模块、甲醛传感器模块、PM2.5采集模块以及一氧化碳采集模块构成,此外还有显示、报警以及Wi Fi无线通信模块。   图1 空气质量检测系统组成框图   2.2.2 功能模块的选择   (1)系统主控制芯片的选择   控制器是系统的主要器件,在满足功能要求的情况下主要考虑性价比,通过对目前市面上比较流行的几大主流单片机芯片对比分析,系统设计宜选用STM32F407ZGT6单片机,该芯片具多个串口,主时钟频率达到168MHz。   (2)PM2.5传感器的选择 PM2.5传感器种类多,有普通传感器,也有激光传感器,可根据精度要求和价格进行选择,相对于普通传感器,激光PM2.5传感器精度高但价格贵许多,本次设计选用价格低的夏普GP2Y1014AU作为PM2.5传感器。   (3)二氧化碳(TVOC)与温湿度传感器选择   考虑到系统功能需求,采用CCS811传感器,它既可检测二氧化碳,又能作为TVOC传感器使用。温湿度传感器选用HDC1080模块,它与二氧化碳(TVOC)传感器集成在一起,采用IIC总线传输数据,体积小。IIC总线类型的传感器结合在一起有利于节省I/O口资源。   (4)一氧化碳以及甲醛传感器模块的选择   一氧化碳(CO)与甲醛属于高危气体,考虑到安全性要求,CO传感器选用ZET07-CO模块,甲醛传感器采用英国达特SMT8404数字式模块,主要是因为这两款传感器是以串口方式传输信号,而且数字信号传输不易受到外界干扰。   3 系统硬件设计   系统硬件设计主要是对各种传感器、Wi Fi无线通信模块等功能器件与STM32单片机的接口电路设计。功能单一的传感器接口电路简单,下面介绍主要的模块接口电路。   3.1 CJMCU-8118传感器模块采集电路设计   CJMCU-8118模块就是CCS811二氧化碳(TVOC)传感器与HDC1080温湿度传感器组合体,采用IIC总线,CJMCU-8118模块与STM32单片机的连接方式如图2所示,其中SCL是IIC数据传输的时钟,SDA为IIC的数据线,WAK是一个使能信号线。   3.2 串口数据传输器件电路设计   系统设计使用四个串口类型的数据传输器件,分别是CO传感器模块、甲醛传感器模块、串口LCD屏幕以及Wi Fi8266模块。这四个串口类型模块与STM32单片机的连接方式如图3所示。采用5V供电电压,其中CO模块连接的是单片机的串口P4,甲醛模块连接的是单片机的串口P3,LCD屏幕连接的是单片机的串口P2,Wi Fi8633模块连接单片机时,需要GBC_LED与GBC_KEY作为控制信号设置Wi Fi8266模块的工作模式。     图2 CJMCM-8118与STM32接口电路 图3串口类模块与单片机连接图   4 系统软件设计 4.1 主控程序设计   在系统运行时可能会出现外界的干扰,为了防止系统在遇到干扰时无法正常运行,系统在软件设计上加入了看门狗程序,保障系统运行不出差错,程序流程图如图4所示。STM32F4的中断系统可配置16个不同优先级别的中断,并且中断之间还可以嵌套中断。首先对单片机初始化,进行优先级分组,在此配置两个响应优先级和两个抢断优先级。   统滴答计时器的初始化是为了做精准的延时而准备的,延时函数在每个模块基本上都有调用。最后对各个模块初始化,主要是对STM32F4最小系统I/O口的参数以及模式进行配置,主要有串口的配置、ADC、IIC、PWM的功能配置。完成了初始化后,系统开始检测Wi Fi模块有没有成功连接路由器。在Wi Fi成功连接之后开始接收数据,与设定数据进行比较,是否有CO、甲醛超标,有超标则蜂鸣器警报,并通过通信方式向手机APP或者PC端发送警报。没有超标将会继续判断CO2、TVOC、温湿度、PM2.5是否超标,如果有超标,系统显示屏将会红色提示,否则,显示屏将会是蓝色,表示正常。   图4主程序流程图   4.2 WiFi模块程序设计   在对Wi Fi模块进行编程之前,先要对WiFi模块进行固件库改写,在固件库改写成功之后才能进行编程,程序流程图如图5所示。图中的喂狗就是上一节提到的看门狗程序,协议处理可直接调用库函数实现。WiFi设备通过配置入网,可由按键启动相应的连接模式,并对配置好的路由器进行连接。   WiFi设备与机智云服务器是双向通信,APP端的操作信息通过机智云服务器发送到Wi Fi设备,WiFi设备接收完成后,单片机(MCU)将会收到协议帧格式的数据,缓冲区将会储存数据。每隔一段时间都会进行一次抓包,然后将数据进行解析,解析后的数据能被MCU识别从而发起事件处理。传感器采集的数据能够被MCU储存,然后这些数据通过协议封装成数据帧发送到WiFi设备,WiFi设备将数据输送至机智云平台的云端服务器,再传输到用户终端。   图5 WiFi模块工作流程图   4.3 传感器模块程序设计   4.3.1 PM2.5传感器模块程序设计   PM2.5传感器主要用到了ADC变换以及PWM脉冲信号配合才能得到采集的数据。采样程序是根据夏普官方说明书中提到要接入一个280us低电平和9720us高电平的PWM信号作为启动信号。通过计算PWM的周期能达到10ms,PM2.5模块只有在PWM低电平280us后才开启转换,因此这时候的ADC采样才是有效的。程序设计时ADC的初始化是通过配置寄存器把管脚功能复用为ADC,PWM初始化是配置PA4管脚相关参数。   根据夏普PM2.5官方提供的典型粉尘电压转换图,如图6所示,可计算粉尘浓度。但是由于起始电压的典型值在不同的地区会有不一样的取值,实际上在很多地区的无尘电压为0V。由图6可知,电压变化范围在0.0V~3.5V时,粉尘浓度与电压呈线性关系。   图6粉尘电压转换图   电压值的转换计算:   粉尘转换计算:     由公式(1)(2)得出总的计算公式:   注:因ADC是12位,212的值是4096,但计算机中12位的非负数补码最大值是4095,公式(3)需要进行修正,修正值为500/4095=0.12,因此,公式(3)要减去0.12,这样实际测量值更准确。   4.3.2 CJMCU-8118模块程序设计   CJMCU-8118模块的信息采集是通过IIC总线进行的,IIC协议启动、停止、等待ACK到来的时序都是通用时序。在IIC总线的通信中要求时钟速度不能过快,否则将会丢失数据,导致无法进行数据的采集。IIC协议内容也相对比较简单,在使用时可以直接调用相应的库函数。IIC总线中规定读取寄存器数据必须选择对应的地址,写入信息之后停止,重新启动才能真正开始读取储存器的数值。   要读取相应的CO2、TVOC、温湿度大小必须将其地址写入传感器,才能获取相应的转化值。写入地址信息以及配置好模块的模式之后,要用IIC的读数据方式。读完数据之后没有应答信号,结束一次数据的读取。程序设计时二氧化碳与TVOC直接是16位的ADC转换值,温湿度计算转换根据官方资料提供的公式。   温度计算公式: 湿度计算公式:     4.3.3 甲醛与一氧化碳模块程序设计   这两个传感器使用的传输方式都是串口方式,并且在数据传输上是一致性,所以两个模块的程序设计方法相同。串口通信(USART)初始化是配置好相应的复用功能,串口采用中断接收的方式,下一步就是要对中断服务函数初始化。在中断数据接收中判断数据是否为0xff的16进制编码,如果是则进一步开始保存相应的数据,当数据达到8位的时候停止接收。经过这一个流程就能完成一次数据的接收。程序设计时根据表2计算CO浓度与甲醛浓度,具体计算公式如下: 表2 串口通信数据传输表     甲醛浓度计算公式:   甲醛浓度(ug/m3)=(高位×256+低位)/10(6)   CO浓度计算公式:     5 系统集成与测试   各功能模块设计、调试完成后,集成为一个系统,再进行系统功能测试。根据实际测量得到的粉尘浓度数据如图7所示。图中数据是在高浓度的粉尘下进行的测试,该测试结果能够验证公式(3)计算的正确性。图8是系统集成图,图中所示信息是在一个VR室测试的空气质量数据,测试结果说明了系统实现了相关功能。     图7实际测量粉尘浓度与电压关系图 图8VR室的实际检测数据效果图   6 结语   项目系统硬件设计了多种不同功能传感器、WiFi无线通信模块与主控制器STM32芯片的接口电路。根据传感器的工作原理设计了相关程序,并以机智云物联网平台和WiFi无线通信模块原理编写了通信程序。实现了对室内空气中的CO、CO2、PM2.5、TVOC、甲醛的含量以及温湿度的实时监测,检测到的数据可在LCD液晶屏显示,同时通过WiFi无线通信技术和机智云物联网平台传输到用户终端,并具有超标报警功能。该空气质量检测系统在VR室得到测试,性能稳定,数据准确,具有实际应用价值。

  • 2021-12-23
  • 发表了主题帖: 机智云AIoT开发平台在智慧渔业工业化养殖系统中的应用

    摘要: 传统养殖系统对水质的监测效果较差,导致渔业养殖效果不佳,因此本文设计基于机智云AIoT开发平台的智慧渔业工业化养殖系统。硬件设计了主控芯片与传感器。软件上:建立智慧渔业水质采集模块,保证数据真实性;基于机智云平台调试系统开发环境,提高养殖渔业的智慧性;构建智慧养殖数据库,规范化处理养殖数据;进而实现智慧渔业的工业化养殖。   物联网技术为我国的经济发展提供了技术手段,逐渐出现物联网产业链的发展方式。由于我国人口基数庞大,物联网技术的发展在智能家居方面的应愈用见熟络,不仅方便人们的生活,还可以为企业提供物联网自主开发能力[1]。     传统的渔业工业化养殖系统在水质的监测上常常与实际水质不符,容易出现误差,影响渔业养殖效果[2]。本文基于此,将工业物联网融入养殖业中,并基于机智云物联网平台的技术设计智慧工业化养殖系统,为养殖业提供智慧化发展方向。   1 智慧渔业工业化养殖系统硬件设计 1.1主控芯片   芯片作为系统中至关重要的硬件,其设计必须满足系统的需求。本文对主控芯片进行强化设计,以外设协同为主,并考虑到CPU成本,设计出强稳定性与高速运转的芯片。在渔业智慧化养殖过程中,要确保数据快速处理与传输的准确性[3]。因此,本文采用STM为主控微处理器,并基于ARM内核,使数据处理能力增强,其在系统运行时,时速可达84 MHz。并在内部设计了高速集成的存储器,可以适应256 KB的flash,具有非常强的扩展性,进而提高系统的运行与处理数据能力。   1.2传感器   在此传感器中,设置了水质温度传感、p H值传感以及溶解氧DO传感[4],将3种传感能力集成于一种传感器中,减少了不必要的成本。为了缩小传感器的尺寸,本文将其设计为9字节RAM,可以在存储温度转换后,进行传感器警示,其测温范围在-55~+125℃,并使用64位光刻ROM,可以直接转换及输出温度数据,传输数据的精确度在±0.1℃范围内。此外,为了精准监测p H值与DO值,本文使用超声波测量,其不会受到光照强度、色彩以及磁场的影响,只需要5 V的电压即可驱动,电流小于2 m A。     2 智慧渔业工业化养殖系统软件设计 2.1建立智慧渔业水质采集模块   水质数据的采集至关重要,数据采集与传输可以通过中断来完成的,在特定时间采样一次后,进行温度补偿[5],并将相关数据输入至主控芯片中,用于数据存储、查询和接收。将水质数据信息通过串行通信接口执行查询或配置数据命令,并作出响应。首先,在数据采集前需初始化系统并初始化串行通信接口与LCD[6];     其次,在AN0与AN2中分别输入温度、溶解氧、p H值等监测参数;再次,调用A/D采集水质状态,定时器15 s中断一次,此时等待来自TMR1的中断,每分钟将完成4次采样;最后,在数据采集完成后,设置下一个计数器,将传感器稳定30 s后,TMR1的中断程序再次进行4次中断,将两次数据采集结果送至主控芯片中,即可完成数据采集[7]。     2.2基于机智云AIoT开发平台调试系统开发环境   在系统运行后:首先,使用esp8266 Wi Fi模块与机智云AIoT开发平台进行连接[8],并将ESP8266置于Air Link模式;其次,使用ESP8266烧录GAgent固件;最后,使用Git Wits协议与机智云AIoT开发平台建立连接[9],连接成功后继续向主控芯片发送请求,即可获取设备实时状态,STM32则会将设备信息上报给ESP8266。用户使用系统时,需要在机智云平台注册账户[10],创建项目管理,登录后即可进入机智云平台的开发中心创建项目新数据点。     本文使用机智云AIoT开发平台提供的APP,调试机智云平台的终端环境,生成MCU代码,移植到处理器上[11]。在MCU开发环境中,平台需要处理gizwits_product.c相关文件,在ESP8266与master通信时,通过mcurestart()函数,配置Reset、Soft AP、AirLink以及Bind device[12]。     2.3构建智慧养殖数据库   通过收集到机智云平台号码,查找生产产品记录,构建生产数据库。本文设计的数据库如表1所示。     表1数据库       如表1所示,本文根据不同的数据库类型,将生产信息、生产类型、规格、原材料以及参数等信息分类,将智慧养殖数据更加规范化,并保证同一类型的生产数据,可以存放在同一个表中,避免养殖数据跨表查询。数据库分类后,大量数据会存放于数据库中,可以提高数据查询与存储性能,也不会增加数据库的负担。     2.4实现智慧渔业的工业化养殖   为了实现智慧渔业的工业化养殖,提高渔业产品的整体质量,通过CPK指数,对系统的综合智慧能力进行评价,如图1所示。       图1 CPK指数效果图   图1中,在CPK指数的基础上,在系统中可以合成智慧曲线,使用线性加权合成整体智慧性能公式如下:         式中:CPK为系统中智慧指数;ci为渔业产品的第i个养殖规格的智慧指数;wi为第i个养殖规格的智慧指数在评估中的权数。为了使此评级效果更具真实性,本文利用上文中采集到的真实数据,建立如下矩阵:       式中:c11-cnm为ci;w1-wn为wi;Q1-m为第1-m组渔业样品的量化质量。由此得出整体智慧性能指数:         式中,cmx为第1-m组数据参数的整体智慧性能指数。通过线性加权,即可反映系统的整体智慧性能。本文对其进       式中,       为CPK的定量参数,通过此分析方法,可以划分出定量评定标准,提高整个系统的智慧性,进而实现智慧渔业的工业化养殖。     3   系统测试   以智能为基础设计的智慧渔业工业化养殖系统。将系统的硬件与软件接入后,对硬件与软件进行调试,验证本文设计的系统是否具有实效性。     3.1测试过程   首先对系统的硬件进行调试,观察主控芯片是否可以通过串口互发消息,传感器是否可以精确的采集数据。因此,在检测时,主要检测主控芯片与传感器的通信I/O,对比相关字节是否收发正确,通信是否可以正常进行,测试图如图2所示。       图2串口测试图     图2中的字节即为标准字节,此时的硬件环境即为正常环境。在硬件调试完成后,本文对软件进行调试,对软件的开发环境进行调试,结果如表2所示。     表2 软件的开发环境与运行环境     表2的参数为本文设计的系统开发环境与运行环境参数,可以保证软件运行无阻碍,进而对渔业养殖水质数据模块进行测试。将纯水置于恒温水箱中,使用溶氧仪对水质数据进行测试,测试结果如表3所示。     表3水质数据       由表3可知:随着水温的升高,p H值也逐渐升高,在水温为19.9℃时,p H值为最佳;随着水温的升高,DO逐渐下降,可以达到标准要求。此水质数据在系统界面显示如图3所示,通过此界面即可实时监测系统的水质条件,使养殖渔业更加智能化。   图3 水质数据文本界面     3.2pH值测试结果及分析   在渔业智慧养殖过程中,水质p H值至关重要,养殖鱼的水质环境p H值应为7.5~8.5。因此,将传统养殖渔业系统水质p H值监测效果,与本文设计的系统水质p H值监测效果进行测试,结果如表4所示。   表4 两个系统水质P H值检测效果对比表       由表4可知:传统系统在水质p H值监测过程中,与水质p H值不符,存在误差,监测效果较差,影响渔业的养殖;而本文设计的系统在水质p H值监测过程中,与实际水质p H值一致,监测效果极佳,极具实用价值。   4结语   近年来,随着物联网的发展,工业、养殖业均开始向物联网靠拢,逐渐形成工业物联网,为相关产业带来了较大的收益。但是就现如今的工业化养殖来说,耗时耗力,不能紧跟时代潮流。基于此,本文结合机智云AIoT开发平台,设计了智慧渔业工业化养殖系统,为养殖渔业的发展提供理论基础。并通过实际pH值实验证明本文系统的监测结果与实际pH值相同,具有较好的实际应用性能。

  • 2021-12-21
  • 发表了主题帖: 十分钟开发物联网:远程甲醛监控(4G模组)

    本帖最后由 毛球大大 于 2021-12-21 18:31 编辑 ShineBlink 是一款零门槛、零开发环境、低代码的万能物联网智能硬件开发板 机智云 为开发者提供傻瓜式硬件上云、接App/小程序的能力 结合 ShineBlink 和 机智云 开发者即使不懂嵌入式物联网开发、云和App开发,也能很快实现一款包含硬件、云和App的物联网智能硬件。   一,实现功能介绍   新装修的房屋一般需要空置一段时间待甲醛含量降低一些再入驻,为了能够实现远程就可以实时查看家中甲醛的含量,并且解决新房没有Wifi信号的问题,我们这里采用4G模组的通信方式,把甲醛传感器读到的数值用4G通信模组上传至机智云,这样我们就可以远程通过手机App看到家中的甲醛数据的实时状况。   下图是接线实物图和App监测页面:   二,硬件端接线图 三,材料清单   四,硬件端完整源代码     五,机智云物联网平台接入和APP开发(三个选择) 选择一: 机智云+通用版App访问设备(难度最低) 通过《4G设备接入机智云教程》我们可以很快掌握机智云的接入流程,并使用现成的通用版机智云App即可很快的实现手机App远程访问我们的开发板。缺点就是通用版App的UI页面看起来不够专业。   本例中我们使用了"Rs1"这个整数型数据点作为甲醛的上传数据通道,记得在机智云平台修改相应的数据点的名称。       选择二:机智云+零代码定制版App访问设备(难度较低) 在选择二之前,必须完成上面选择一的工作,然后参考《赛博坦零代码App开发(4G版)》教程实现定制版App访问设备。开发好以后的页面如下:   选择三:定制化开发App或微信小程序(难度较高) 如果有一定开发能力,开发者可以考虑在机智云免费提供的开源代码上做一定的定制开发形成自己的App。 如果开发者希望开发一个专属的App,机智云物联网平台提供代码开源的安卓和IOS SDK框架,帮助开发者快速完成App开发,开发者仅需关注App的UI和UE设计即可,而相对复杂的协议与错误处理等事项可忽略。 关于开源SDK的介绍和获取请点击此处。 如果开发者希望开发一个专属的微信小程序应用,可以点击此处了解。 六、项目视频演示教程    

最近访客

< 1/2 >

统计信息

已有15人来访过

  • 芯积分:130
  • 好友:--
  • 主题:32
  • 回复:5
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言