1、设计整体思路

开发板使用了ESP8266Wi-Fi模块实现数据传输。
控制流程图
ESP8266模块负责传输数据,手机通过Wi-Fi连接至机智云平台,并传输指令至平台再而传递控制指令至开发板,实现Wi-Fi的远程控制。
实现RGB灯颜色变换,全彩等颜色变换,电机转速变换和温湿度数据传输显示的远程控制功能。

2、机智云平台的部署

2.1、创建产品

创建属于自己的新产品,产品分类和产品名称随自己编辑,选择 “Wi-Fi/移动网络方案” ,通讯方式 “Wi-Fi”,数据传输方式为 “定长”,选择完成后确定保存。并能看到自己开发中的产品。

2.2、创建数据点

数据点是一套机智云设备通信协议,用于描述设备功能及其参数。简单点来说,数据点就是用来传递控制数据的。通过数据点,用户可以通过手机改变数据时传递到开发板,对应数据点实现开发板上的对应功能。
数据点的创建如下(可参考):

显示名称 标识名 读写类型 数据类型 范围 分辨率
RGB灯开关 LED_OnOff 可写 布尔值 / /
全彩灯 LED_Color 可写 枚举 0.无 1.橙色 2.紫色 3.粉色 /
RGB灯_R LED_R 可写 数值 0-254 1
RGB灯_G LED_G 可写 数值 0-254 1
RGB灯_B LED_B 可写 数值 0-254 1
风扇转速 Motor_Speed 可写 数值 -3-3 1
温度 Temperature 只读 数值 -13-187 1
湿度 Humidity 只读 数值 0-100 1

注:显示名称用于显示在手机端软件的名字,而标识名用于数据点编程。

2.3、启动虚拟设备

虚拟设备主要用于检验你所创建的数据点,手机端是否能通过测试软件(机智云平台官方软件)发送数据值,机智云平台会接收到数据,判断你的数据点是否成功运行。

当手机通过软件扫描二维码后,会连上一个虚拟设备,手机界面如图的左边显示,当控制手机端的软件对数据进行改动时,模拟设备上报的数据就会随手机更新,通信日志也会随之更新。此时说明数据点创建成功。
下面便可以在服务中创建 MCU开发,选择 SOC方案,快速创建工程,此时机智云平台会根据你的数据点为你制定固定的程序模板。
注:每当改动数据点时程序模板都需要选择修改,重新输密钥下载,否则下载下来的程序都是未修改前的代码。
注意的创建MCU开发的 Product Secret在基本信息中,需要输入密码后便可显示完整密钥。
至此机智云平台基本上部署完成,下面便可以进行代码的修改。

3、功能代码实现

各功能模块的函数封装分别存放在 ./app/driver目录下,头文件存放在 ./app/include/driver目录下。需要实现什么功能就把功能函数封装存放在以上两个目录。

3.1、RGB灯模块

RGB的原理图:

由上述原理图可以知道,RGB灯由P9813模块控制,而P9813是由DIN、CIN来控制,故在开发板上需要接通DIN和CIN两个引脚。
P9813 是一款全彩点光源 LED 驱动芯片,采用 CMOS工艺,提供三路恒流驱动及 256 级灰度调制输出。采用双线传输方式(DATA 与 CLK) ,内建再生,可提升传输距离。用于驱动显示灯光变换、各式字符变换、彩色动漫图案。
DIN引脚为串行数据输入,内置上拉。通过函数rgbControl便可输入控制RGB灯颜色的数据。
功能调用函数:

void ICACHE_FLASH_ATTR rgbControl(uint8_t R, uint8_t G, uint8_t B)
{//contron powersend_32zero();dataDealwithSend(R, G, B);      // display reddataDealwithSend(R, G, B);    // display red
}PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15); PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4); gpio_output_set(0, 0, GPIO_ID_PIN(GPIO_RGB_SCL) | GPIO_ID_PIN(GPIO_RGB_SDA), 0);

引脚布置:

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
gpio_output_set(0, 0, GPIO_ID_PIN(GPIO_RGB_SCL) | GPIO_ID_PIN(GPIO_RGB_SDA), 0);

3.2、全彩灯模块

全彩灯原理图:

由原理图可知,开发板上需要连同DIN1-G#0才能点亮全彩灯。而全彩灯上的每一盏RGB灯都由24位的寄存器控制。

分别控制着绿色、红色和蓝色,其中每八位代表着0 - 254的颜色深度值。
同理,通过setAllPixelColor函数可以对DIN1数据进行输入,从而全彩灯的颜色变化。

void  SEND_WS_0()
{uint8_t time;time = 3; while(time--) WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + GPIO_ID_PIN(WSGPIO), 1 );time = 8; while(time--) WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + GPIO_ID_PIN(WSGPIO), 0 );
}void  SEND_WS_1()
{uint8_t time; time = 7; while(time--) WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + GPIO_ID_PIN(WSGPIO), 1 );time = 5; while(time--) WRITE_PERI_REG( PERIPHS_GPIO_BASEADDR + GPIO_ID_PIN(WSGPIO), 0 );
}void ICACHE_FLASH_ATTR setAllPixelColor(uint8_t r, uint8_t g, uint8_t b)
{ uint8_t i=0;for(i=0;i<PIXEL_MAX;i++){rBuffer[i]=0;gBuffer[i]=0;bBuffer[i]=0;}for(i=0;i<PIXEL_MAX;i++){rBuffer[i]=r;gBuffer[i]=g;bBuffer[i]=b;}for(i=0;i<PIXEL_MAX;i++){                            WS2812BSend_24bit(rBuffer[i],gBuffer[i],bBuffer[i]);}
}

3.3、风扇

电机是通过L9110来控制的,L9110是为控制和驱动电机设计的两通道推挽式功率放大专用集成电器器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高。该芯片有两个TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过800mA的持续电流,峰值电流能力可达1.5A;同时它具有较低的输出饱和压降;内置的钳位二极管能释放感性负载的反向冲击电流,使它在驱动继电器、直流电机、步进电机或开关功率管的使用上安全可靠。
在控制波形上,输入A和输入B相反,而输出A和输出B与其输入一样。
电机原理图:

通过PWM1,PWM2来控制L9110,GPIO12连接PWM1,GPIO13连接PWM2。

void ICACHE_FLASH_ATTR motorPwmControl(uint8_t m0, uint8_t m1)
{uint32 temp_m0 = 0;uint32 temp_m1 = 0;temp_m0 = (uint32)((m0 * 1.0 / (MOTOR_SFCT_STA )) * (MOTOR_MAX_DUTY));temp_m1 = (uint32)((m1 * 1.0 / (MOTOR_SFCT_STA)) * (MOTOR_MAX_DUTY));if(temp_m0 != motorParam.duty[CHANNEL_0]){pwm_set_duty(temp_m0, CHANNEL_0);motorParam.duty[CHANNEL_0] = pwm_get_duty(CHANNEL_0);}if(temp_m1 != motorParam.duty[CHANNEL_1]){pwm_set_duty(temp_m1, CHANNEL_1);motorParam.duty[CHANNEL_1] = pwm_get_duty(CHANNEL_1);}pwm_start();}void ICACHE_FLASH_ATTR motorControl(_MOTOR_T status)
{if((-5 > status) || (5 < status)){os_printf("Motor_status Error : [%d] \r\n", status);}if(status == 0){motorPwmControl(0, 0);}else if (status > 0){motorPwmControl(MOTOR_MIN_STA, (uint8_t)status);}else if (status < 0){motorPwmControl(MOTOR_SFCT_STA, (uint8_t)(MOTOR_SFCT_STA - abs(status)));}
}

3.4、温湿度模块

温湿度传感器DHT11,该传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保具有极高的可靠性不卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,因此该具有品质卓越、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精准的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,产品为4针单排引脚封装。相关参数:精度湿度±5%RH,温度±2℃,量程湿度20-90%RH,温度0 ~ 50℃。
温湿度模块原理图:

3.5、Gizwits函数

对于机智云平台下载的模板,除了将需要实现的功能函数封装移植到模板之外,主要的一步修改./Gizwits/gizwits_product.c文件,该函数主要是对发生事件进行对应的开发板动作控制。
不管是RGB灯数据点,还是其他事件,发生了改变,机智云平台就会传递到通过ESP8266接收传递到开发板,开发板接收到事件,就会通过判断,执行对应控制。

如,当设置LED_Color数据点发生改变,触发事件,便进行一下判断,进行全彩灯的控制。

 case EVENT_LED_Color:currentDataPoint.valueLED_Color = dataPointPtr->valueLED_Color;GIZWITS_LOG("Evt: EVENT_LED_Color %d\n", currentDataPoint.valueLED_Color);switch(currentDataPoint.valueLED_Color){case LED_Color_VALUE0://user handlesetAllPixelColor(0, 0, 0);break;case LED_Color_VALUE1://user handlesetAllPixelColor(254, 35, 0);break;case LED_Color_VALUE2://user handlesetAllPixelColor(250, 0, 70);break;case LED_Color_VALUE3://user handlesetAllPixelColor(240, 30, 30);break;default:break;}break;

诸如此类事件的判断,就可以基本实现对开发板的功能无线控制。

3.6、main函数

主函数主要实现的各功能函数的初始化,以及实现温湿度数据的传输,需要注意的是./Gizwits/gizwits_product.c文件是不会显示温湿度事件的,因为温湿度的数据点的数据类型设置为只读,所以不会再那个文件下进行事件判断,执行对应操作。
但可以在./Gizwits/gizwits_product.c文件下进行温湿度数据传递,而我在main函数下实现该功能也是同样的道理。

void ICACHE_FLASH_ATTR userTimerFunc(void)
{uint8_t ret = 0;uint8_t curTemperature = 0;uint8_t curHumidity = 0;static uint8_t thCtime = 0;thCtime++;if(TH_TIMEOUT < thCtime){thCtime = 0;ret = dh11Read(&curTemperature, &curHumidity);if(0 == ret){currentDataPoint.valueTemperature = curTemperature;currentDataPoint.valueHumidity = curHumidity;}else{os_printf("@@@@ dh11Read error ! \n");}}//setAllPixelColor(0,50,0);system_os_post(USER_TASK_PRIO_0, SIG_UPGRADE_DATA, 0);
}

使用定时器去调用回调函数,实现每隔一段时间就回传温湿度数据至机智云平台,再传至手机上显示。
此外就是其他功能函数的初始化:

 //user init//rgb led initrgbGpioInit();rgbLedInit();//temperature and humidity initdh11Init();keyInit();//motor initmotorInit();motorControl(0);WS2812B_Init();//gizwits InitSIG_UPGRADE_DATAos_memset((uint8_t *)&currentDataPoint, 0, sizeof(dataPoint_t));gizwitsInit();  system_os_task(gizwitsUserTask, USER_TASK_PRIO_0, userTaskQueue, userQueueLen);//user timeros_timer_disarm(&userTimer);//定时器清零os_timer_setfn(&userTimer, (os_timer_func_t *)userTimerFunc, NULL);//开启定时器,构建回调函数userTimerFuncos_timer_arm(&userTimer, USER_TIME_MS, 1);//每一定时间调用回调函数
在编译工程前,需要在工程设置中增添“COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=4”来为工程的编译做准备工作。

4、最终成果

手机软件封面(采用官方测试软件):

当调节不同的开关,机智云云平台就会接收到不同的数据,再而发送对应的数据点的数据至开发板,开发板通过ESP8266模块接收到数据后,判断对应事件的发生进行对应的功能实现。
由于效果图没有拍下来,就选择口头表述效果。
如:全彩灯选为橙色------点阵全彩灯便会全亮且为橙色
风扇转速调为-3-------风扇会逆时针旋转(绝对值越大,转速越快)

5、不足

没有考虑好开发板内存的空间,在引入点阵的头文件时,编译时会出错,就是因为内存空间不足,需要在部分函数前引入ICACHE_FLASH_ATTR,作用在于让该函数存入irom0_0_seg,在需要用到的时候才导入iram1_0_seg。
此外在点阵的C文件下减去不需要的功能函数,节省空间的同时能保留点阵RGB灯的功能模块。

【物联网设计记录】基于机智云云平台的Wi-Fi控制开发板相关推荐

  1. 基于机智云平台的STC15实验台控制系统设计

    摘要: 设计了一套实验台控制系统,将STC15单片机和物联网相结合,以继电器为执行末端,实验室温度由DS18B20测出发送给IAP15W4K58S4单片机,配合esp8266-12F物联网模块,通过机 ...

  2. 基于机智云平台的泵站智能巡检系统

    本文是由开发者设计开发的一款泵站智能巡检系统.该系统改变了常规的专人值守的工作模式,实现泵站运行状态的远程智能巡检工作,达到自动监测.故障报警.提前预测等功能. 随着我国水利事业不断发展,泵站在水利调 ...

  3. 基于机智云平台的智能家居系统

    摘要:随着社会的发展,人们对于生活质量的要求越来越高,智能家居作为能够大幅提升人们生活舒适度的一部分,得到了越来越多的人关注,更多方便.实用的智能家居系统急需被提出. 本文设计了一种基于机智云物联网云 ...

  4. 基于凌鸥平台的120° 方波控制 BLDC 无感 比较器反电动势过零点

    基于凌鸥平台的120° 方波控制 BLDC 无感 比较器反电动势过零点 :95800668808014970MCTianci

  5. 【毕业设计_课程设计】基于Android Studio平台的测量程序设计与实现

    文章目录 0 项目说明 1 简介 2 程序说明 2.1 主界面 2.2 测量工具箱 2.3 五个测量程序 3 项目工程 0 项目说明 基于Android Studio平台的测量程序设计与实现 提示:适 ...

  6. 基于物联网的多点温度监控系统(WeMOS D1 WIFI ESP8266 开发板)

    基于物联网的多点温度监控系统 一.设计任务与要求 1. 任务 设计制作基于物联网的多点温度监控系统. 2. 要求 1.实时获取3个被测对象温度,温度测量范围:-55℃ -+125℃:测量精度:0.1℃ ...

  7. 物联网小项目智能家居(QT、MQTT、嵌入式开发板、Ubuntu)

    项目框架: 概述:搭建一个物联网的实战小项目,为本阶段的学习做了一次总结及记录.把构建的整个过程分享出来给大家,项目难点在于各种环境的搭建,而代码逻辑并不难. 说明: (1)本项目总共涉及到了4个MQ ...

  8. 第十九期 基于HG255d_U-Boot的uIP移植《路由器就是开发板》

    前面三期我们大略了解了U-Boot的三个常用功能,串口调试输入输出,flash操作,和网络连接,这一期我们来进行U-Boot的改造,我们改造的主题是优化U-Boot的网络功能,我们最终的目的是优化U- ...

  9. 基于AM57x的GigE工业相机图像采集案例TL5728-IDK开发板

    1开发环境 表 1 开发板型号 是否支持本实验 TL5728-EasyEVM 支持 TL5728-IDK 不支持 TL5728F-EVM 不支持 AM57x开发板(使用7英寸液晶显示屏) 本案例所有 ...

最新文章

  1. Django:永别了pycrypto库~
  2. Python+selenium自动化测试:报错:TypeError: 'WebElement' object is not iterable
  3. iOS性能分析-Xcode Instruments Allocations 分析APP内存使用情况
  4. extern quot;Cquot; 的含义:实现C++与C及其他语言的混合编程
  5. 计组原理 : 计算机可靠性概述和性能评价
  6. boost::hana::tuple_t用法的测试程序
  7. 第二篇:Spring Boot 热部署
  8. 详解MRS CDL整体架构设计
  9. 充一次电使用一年的手机_超级手机电池:充一次电用一年多?
  10. C++技术在哪些领域中最为适用?
  11. error: implicit declaration of function ‘RAND_egd’ [-Werror=implicit-function-declaration]
  12. 教师职称考计算机模块,2015教师职称计算机考试模块.doc
  13. 记者调查:害死多条人命的校园贷卷土重来 支付机构金运通牵涉其中
  14. mysql gtid dump_MySQL之mysqldump备份的--set-gtid-purged参数
  15. 上海应届毕业生起薪调查报告
  16. 松翰单片机--SN8F5702学习笔记(七)TIMER0、TIMER1
  17. Ckplayer试看功能
  18. 2008年IT业十大预测:微软收购雅虎
  19. 7-3 计算平均成绩(15 分)(转载)
  20. 【MidJourney】初体验——账号注册与基本操作

热门文章

  1. 快学Big Data -- Hadoop(十三)
  2. Linux下优雅的让程序后台运行
  3. 什么是PWM“死区”
  4. 简单沟通,远离纸质繁琐!灵活简单的在线表单制作工具
  5. IT项目经理的个人知识管理(转)
  6. Firefly ROC-RK3328-PC 四核64位入门级Mini PC 官方教程矫正经验
  7. 私域流量池怎么运营?从三个点去考虑
  8. 前端批量生成二维码并打包下载
  9. 云客服让每一个企业客户都成为座上宾
  10. 扫拖一体洗地机实用吗、扫拖一体洗地机哪个品牌好,看完就知道