TA的每日心情 | 开心 2018-3-16 10:27 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
|
准备好一块机智云8266的宠物屋顶板,没有的可以直接用8266小系统板和一个P9813的RGB模块(马叔叔家有自己找)
按键接在GPIO14
RGB模块的SDA接在GPIO4,SCL接在GPIO15
创建一个变长的的云端产品,定义以下数据点
- 设定LED红色值
标识名:LED_R
读写类型:可写
数据类型:数值
数据范围:0 - 254
分辨率:1
增量:0
备注: 无
- 显示名称:设定LED绿色值
标识名:LED_G
读写类型:可写
数据类型:数值
数据范围:0 - 254
分辨率:1
增量:0
备注: 无
- 显示名称:设定LED蓝色值
标识名:LED_B
读写类型:可写
数据类型:数值
数据范围:0 - 254
分辨率:1
增量:0
备注: 无
创建数据点完毕之后生成SOC代码,论坛冯叔的帖子有基本的生成教程,此处我就不再废话。【体验】+0基础实现GPRS远程插座下载生成的代码之后移植以下代码(hal_rgb_led.c和hal_rgb_led.h)
hal_rgb_led.c
#include "driver/hal_rgb_led.h"
#include "osapi.h"
static void ICACHE_FLASH_ATTR rgbDelay(unsigned int us)
{
/* Define your delay function */
volatile unsigned int i=0;
for(i=0; i<us; i++);
}
/************ generation clock *********************/
static void ICACHE_FLASH_ATTR clkProduce(void)
{
SCL_LOW; // SCL=0
rgbDelay(40);
SCL_HIGH; // SCL=1
rgbDelay(40);
}
/********** send 32 zero ********************/
static void ICACHE_FLASH_ATTR send_32zero(void)
{
uint8_t i;
SDA_LOW; // SDA=0
for (i=0; i<32; i++)
{
clkProduce();
}
}
/********* invert the grey value of the first two bits ***************/
static uint8_t ICACHE_FLASH_ATTR takeAntiCode(uint8_t dat)
{
uint8_t tmp = 0;
tmp=((~dat) & 0xC0)>>6;
return tmp;
}
/****** send gray data *********/
static void ICACHE_FLASH_ATTR dataSend(uint32 dx)
{
uint8_t i;
for (i=0; i<32; i++)
{
if ((dx & 0x80000000) != 0)
{
SDA_HIGH; // SDA=1;
}
else
{
SDA_LOW; // SDA=0;
}
dx <<= 1;
clkProduce();
}
}
hal_rgb_led.h
#ifndef _HAL_RGB_LED_H
#define _HAL_RGB_LED_H
#include <stdio.h>
#include <c_types.h>
#include <gpio.h>
#include <eagle_soc.h>
/* Define your drive pin */
#define GPIO_RGB_SCL 15
#define GPIO_RGB_SDA 4
//#define GPIO_RGB_POW 15
/* Set GPIO Direction */
#define SCL_LOW GPIO_OUTPUT_SET(GPIO_ID_PIN(GPIO_RGB_SCL), 0)
#define SCL_HIGH GPIO_OUTPUT_SET(GPIO_ID_PIN(GPIO_RGB_SCL), 1)
#define SDA_LOW GPIO_OUTPUT_SET(GPIO_ID_PIN(GPIO_RGB_SDA), 0)
#define SDA_HIGH GPIO_OUTPUT_SET(GPIO_ID_PIN(GPIO_RGB_SDA), 1)
//#define POW_HIGH GPIO_OUTPUT_SET(GPIO_ID_PIN(GPIO_RGB_POW), 1)
#define R_MAX 255
#define G_MAX 255
#define B_MAX 255
/* Function declaration */
void rgbControl(uint8_t R, uint8_t B, uint8_t G);
void rgbLedInit(void);
void rgbGpioInit(void);
void rgbSensorTest(uint8_t rgbcou);
#endif /*_HAL_RGB_LED_H*/
移植以上2个程序到项目内
按键初始化函数里面加入RGB端口初始化
rgbGpioInit和rgbLedInit
在云端数据处理的地方可以通过void rgbControl(uint8_t R, uint8_t B, uint8_t G); 函数进行RGB的控制
rgbControl(currentDataPoint.valueLED_R, currentDataPoint.valueLED_B, currentDataPoint.valueLED_G);
编译下载到板子就能运行,并外也可以用WS2812,制作过程一样
|
|