esp8266 SOC方案实现远程测控系统:IoT开发入门教程

[复制链接]
235|3
 楼主 | 2018-6-5 16:36 | 显示全部楼层 |阅读模式
esp8266 SOC方案实现远程测控系统
实现功能:
1.控制一个大功率LED灯和一个继电器
2.控制RGB灯珠,实现颜色调节
3.实时获取温湿度(DHT11)
4.一个按键短按控制大功率LED灯珠亮和灭(同时上报状态),长按实现SOFTAP模式;一个按键控制继电器的开和关(同时上报状态),长按实现AIRLINK模式。

硬件准备:
1.ESP12F(32Mbit)一个
2.DHT11一个
3.RGB_LED一个(由于是3V共阴,所以暂时不加限流电阻)
4.电容电阻排针若干(参考电路图)
5.微动开关3个(复位,继电器,LED灯控制)
6.万用板一块
7. 5V继电器一个(可以用模块。也可以直接搭建继电器电路)
8.3.3V稳压一个1117

GPIO接线对应
GPIO12----RGB_LED红
GPIO13----RGB_LED绿
GPIO14----RGB_LED蓝
GPIO15----DUT11数据
GPIO4-----大功率LED控制引脚(驱动NPN三极管)
GPIO5-----继电器控制引脚(驱动NPN三极管)
GPIO0-----LED开关控制(SOFTAP)
GPIO2-----继电器开关控制(AIRLINK)
设计电路图:
制作教程:
首先进入开发者中心:https://dev.gizwits.com/zh-cn/developer/进行账号的注册和登陆。认证之类的自己按照实际情况去认证。此处不在详述,不会可以加Q问我:1083791810tencent://message/?uin=1083791810&Site=fdfdf&Menu=yes
登陆认证过后进入个人项目或者公司项目,都是一样的,看你认证的是个人还是公司。在公司下面创建产品以后就只能在公司目录下浏览产品信息。
       教程从这儿开始,首先点击右上角创建新产品。

按照如图所示设置好产品参数,产品分类随便选相应的就行,乱选不会影响产品;产品名称就是给产品取个名字,可以是中文和英文,此处为了教学,我就写一个远程测控;技术方案选择wifi/移动网络方案;通讯方式选择wifi(此处因为是soc方案,所以直接用wifi);数据传输方式选择定长(定长就是把所有数据点一次全部传输,变长就是只传输变化那部分,个人建议在数据点不多的情况下最好选用定长,在数据点很多的时候才考虑变长),按照如图设置好之后直接点击保存。就完成了产品的创建,会自动跳转到产品页面。

接下来我们需要给产品添加数据点,数据点是网络传输的标识,同一个产品中每个数据点标识名都必须是唯一的,比如有多个开关,每个开关都必须给予唯一的标识名,而且标识名必须是英文,数字,或者2个的组合。数据点需要设置三个参数,标识名,读写类型,数据类型,按照下图1 2操作可以增加数据点

关于三个参数按照以下规定:(对于不理解数据点的可以加QQ问我,先阅读看不懂再问)
标识名:
用于应用层传输,客户端或业务云开发时需要使用。命名规则遵循标准的开发语言变量名命名规范,支持英文字母、数字和下划线,以英文字母开头。

读写类型:(比如一个继电器的开关量需要在APP上进行开关操作,就设置可写,不需在APP上操作就只读,设置只读之后APP就只能观察状态而不能控制,温度湿度就是只读的,判断温湿度是否不在规定值就是报警,判断DHT11是不是正常接线就是故障)
① 只读:表示该数据点非控制,数据只支持从设备上报。
② 可写:表示该数据点可控制。设备端可上报该数据点数据;云端/客户端可对该数据点数据做出下发控制。
③ 报警:表示该数据点非控制,数据只支持从设备上报,数据类型需为布尔值。
④ 故障:表示该数据点非控制,数据只支持从设备上报,数据类型需为布尔值。云端会对设备上报的该数据点做统计,可在“运行状态”查看。

数据类型:(比如继电器的开关,就是布尔值,温湿度就是数值)
① 布尔值:表示两个状态:0,或1。如开关状态等,建议使用布尔数据类型。例如打开关闭继电器,打开关闭大功率LED。
② 枚举类型:可定义一个有限的取值集合。当定义的某个功能(元器件)有固定的若干个值。例如设置RGB为关闭,自定义组合,红色,绿色,蓝色,黄色,紫色,粉色,白色。
③ 数值:填写数值范围,数值可为负数/小数,机智云自动将数值转换为正数。例如温湿度,RGB色度调节控制等。
④ 扩展:填写数据长度,数据内容由用户自定义。对于上述功能点无法满足的复杂功能可采用。机智云不建议使用此类型数据,设备上报该数据点的数据,机智云无法识别。

根据以上内容,我们开始创建数据点,首先建立大功率LED的数据点,此处我们就用switch_led表示,由于要在APP操作其开关,就选择可写,开关量直接用布尔值。备注没有作用的,可以写了防止遗忘。

设置好参数之后点击确定,然后按照如图箭头所示可以编辑这个数据点,为什么要进行编辑,因为我们希望在APP上看到他是中文的方式显示而不是数据点名称显示。

点击编辑之后标识名不用改,改显示名称,数据点创建错了也可以在这儿进行调整修改。此处我修改成电灯。
修改好之后点击确定。同样的方法创建继电器的数据点,标识名switch_relay,显示为插座,可写,创建好之后如下图



接着我们创建一个颜色控制的枚举可控数据点,用来快速控制RGB灯的颜色。枚举范围一定要是英文输入下的逗号。数据点标识名为color_controls,可写,枚举,枚举范围:关闭,自定义,红色,绿色,蓝色,黄色,紫色,粉色,白色,显示名称:RGB控制


接下来创建3个RGB自由调节的可写数值数据点:标识名分别为:LED_R,LED_G,LED_B,可写,数据类型:数值,数据范围0-254,分别率为1. 显示名称红色(R)l绿色(G)蓝色(B),创建好之后如图所示。

接下来温湿度显示,范围就取正常的DHT11可控范围。温度范围0-50.湿度0-100,设置好后如下图所示,创建完之后点击最上面的应用
显示名称:温度(℃)标识名:temperature读写类型:只读 数据类型:数值 数据范围:0 – 50  分辨率:1增量:0备注: DHT11测量温度
显示名称:湿度(%)  标识名:humidity     读写类型:只读 数据类型:数值 数据范围:0 - 100分辨率:1增量:0备注: DHT11测量湿度

关于对分别率和精度的理解可以参考这段说明,在定义数值型数据点的时候,取值范围可以使用包括小数、负数等非uint类型数值,熟悉嵌入式开发的开发者会知道,这些数值在设备端都是不被支持的。
机智云为了让设备功能定义更加简单直接、所见即所得,研究出来一套算法,用于将用户输入的数值转换成设备能够识别的uint类型,这套算法的核心公式是:y=kx+m。
y表示“显示值”,就是用户可见的最终数值,也是数据点定义时输入的值。包括Ymin(最小值) 和 Ymax(最大值)。
x表示“传输值”,就是实际指令间传输使用的数值,云端/客户端接收到的值。一定是uint格式。也包括 Xmin 和 Xmax。
k表示“分辨率”,就是用户输入的分辨率一值,确定了每个取值的步进。
m表示“取值偏移量”或“增量”,算法通过m值将y值偏移到满足x值uint格式的要求,m值默认等于Ymin,确保Xmin=0 。
以下用一个电子温度计举例说明换算过程 数据点内容:取值范围:-30(Ymin)~ 50(Ymax),分辨率:0.1
根据公式:y=kx+m,m默认等于Ymin -30
Xmin =(-30+30) / 0.1 = 0
Xmax = (50+30)/ 0.1 = 800
所有数据点如下表格所示,到这儿所有的数据点就创建完毕,可以从以下表中进行复制粘贴。

设备共享的开启:设备共享开启之后,可以通过APP进行分享,具体开启方法是电机基本设置,修改。设备分享功能:后面点一下开启,弹出框选择开启,就完成设备分享功能。

接下来我们需要生成SOC的代码。生成之前我们先去基本信息里面复制Product Secret,点击显示完整密钥,输入登录密码,查看就能复制了,复制之后保存一会儿会用到。

复制好之后点击左侧的MCU开发,然后选择SOC方案,32M,粘贴刚才复制的Product Secret,然后点击下面的生成代码包,等到进度条完成之后,代码就生成了,下载代码所生成,到这儿,所有的云端工作就已经完成了。接下来就是代码的修改。


接下来是代码的修改,修改代码和编译代码用的是乐鑫的专用IDE,没有开发环境或者需要这个开发环境的可以去群438373554 https://jq.qq.com/?_wv=1027&k=5nxGDB1的群文件进行下载,安装遇到问题可以QQ联系我,
       安装软件之后打开软件,在软件的左侧导航右键,导入项目(Import),

选择Makefile项目,然后点击下一步

选择BROWSE按钮,载入Makefile所在的根目录(这个目录很重要,一定要是解压过后的Makefile所在的根目录,目录下面包含了APP,BIN ID等多个文件夹,如果选错,将不能正确导入项目。)

选择好目录之后,需要选择编译器这儿我们用Cygwin GCC编译器,然后点击Finish就能成功导入项目。

成功导入的项目如图所示,到这儿我们的项目已经成功导入到了软件之中,我们接下来要进行代码修改。

首先我们先要修改根目录下面的Makefile文件,双击打开文件,找到文件的的22行,我们需要修改其内容,其目的是对应我们单片机的flash的通讯方式。将
BOOT?=none
APP?=0
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=0
内容修改为:
BOOT?=new
APP?=1
SPI_SPEED?=40
SPI_MODE?=QIO
SPI_SIZE_MAP?=6
修改完成之后保存关闭。

接下来我们创建一个布尔数组来保存继电器和大功率LED的开关状态,我们需要在gizwits_product.h文件里面定义,然后再gizwits_product.c里面进行全局定义,方便其他文件进行调用。
在gizwits_product.h文件里面添加代码extern bool STA[2]; //继电器和大功率LED标志位

在gizwits_product.c里面添加代码bool STA[2]={0}; //用于存储状态,初始化为关闭状态

接下来我们需要修改按键,实现2个按键对应的功能,打开user_main.c文件。需要对长短按键进行修改,首先我们原理图用的是GPIO0和GPIO2引脚,GPIO0对应的是LED开关控制和SOFTAP(长按),GPIO2对应的是继电器开关控制和AIRLINK(长按)。
找到user_main.c里面的按键重定义,在第45行附近:
#defineKEY_0_IO_MUX                           PERIPHS_IO_MUX_GPIO0_U      
#defineKEY_0_IO_NUM                           0                           
#defineKEY_0_IO_FUNC                          FUNC_GPIO0                  
#defineKEY_1_IO_MUX                            PERIPHS_IO_MUX_MTMS_U      
#defineKEY_1_IO_NUM                           14                          
#defineKEY_1_IO_FUNC                          FUNC_GPIO14                 

教程到此结束


其他资料和代码由于附件太大,上传百度网盘了   链接:https://pan.baidu.com/s/1jKjLXlFqWeqiQFZNG5L3zQ 密码:vzec

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
| 2018-6-6 12:48 | 显示全部楼层
机智云的平台还是非常不错的,基本是完全开源了,调用非常方便
| 2018-6-8 20:42 | 显示全部楼层
机智云对个人用户开放接口了吗?
 楼主 | 2018-6-15 15:32 | 显示全部楼层
diy1997 发表于 2018-6-8 20:42
机智云对个人用户开放接口了吗?

你说的接口是指哪方面的呢?

机智云Open API是否能满足你的需求呢
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /6 下一条

分享 快速回复 返回顶部 返回列表