HTML5技术

[自己动手玩黑科技] 1、小黑科技——如何将普通的家电改造成可以与手机App联动的“智能硬件” - beautifulz(2)

字号+ 作者:H5之家 来源:博客园 2015-11-16 19:40 我要评论( )

1 switch (TxBuffer1[ 0 ]){ : 3 GPIO_SetBits(GPIOA, GPIO_Pin_4);//置PA4引脚为高 (ticks-- ); 6 GPIO_ResetBits(GPIOA, GPIO_Pin_4);//置PA4引脚为低 7 break ; : 9 GPIO_SetBits(GPIOA, GPIO_Pin_5); 10 ticks

1 switch(TxBuffer1[0]){ : 3 GPIO_SetBits(GPIOA, GPIO_Pin_4);//置PA4引脚为高 (ticks--); 6 GPIO_ResetBits(GPIOA, GPIO_Pin_4);//置PA4引脚为低 7 break; : 9 GPIO_SetBits(GPIOA, GPIO_Pin_5); 10 ticks = 900000; 11 while(ticks--); 12 GPIO_ResetBits(GPIOA, GPIO_Pin_5); 13 break; : 15 GPIO_SetBits(GPIOA, GPIO_Pin_6); 16 ticks = 900000; 17 while(ticks--); 18 GPIO_ResetBits(GPIOA, GPIO_Pin_6); 19 break; 20 default:break; 21 }

AD则对小白来说稍微难以理解一点,简单来说AD就和电压表的功能类似,可以读取某一引脚上的电压值。

上面讲到,我们分别用PA0\PA1\PA2\PA3四个引脚读取四个指示灯的电压值,然后在嵌入式程序中判断每个电压值是高电平还是低电平,来判每个指示灯的状态:

  读取电压值小于1V表示低电平,表示指示灯亮;读取电压值大于3.2V表示高电平,表示指示灯暗

其相应的代码大家也能明白:(每次通过蓝牙发送一个以'S'开头、'E'结尾、中间包含4个字母(每个字母可以是'Y'、'N'、'M',分别表示对应指示灯状态为开、关、未知...其中第5行调用GetVolt(After_filter[i])函数是取多次测AD值的一个平均,用这个平均值能减少一些干扰;接下来6、7、8三行为根据所测AD值计算对应指示灯的状态。 

);(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);(i = { value[i] = GetVolt(After_filter[i]); );(value[i]>);USART_OUT(USART1,);(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); 10 ticks = 900000; 11 while(ticks--); 12 } ); 14 while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

个嵌入式工程是基于STM32F103C8T6单片机开发的,其工程结构比较清晰如下:

Startup中的文件是stm32的启动文件,是纯汇编写的,主要用来启动stm32,在此之后就进入我们熟悉的main函数的位置执行了!

 

 

main.c函数包含主要的初始化函数和main函数,上面两个逻辑处理函数全在main函数中。

stm3f10_it.c是中断函数,这里主要有一个串口数据接收中断函数。

 

FWLIB中是本工程用到的功能如:AD、DMA、GPIO、RCC、USART等的库,暂不用考虑

 

CMSYS中是stm32固件相关,暂不用考虑

 

 

注:不熟悉的人能看懂上面两个贴出的代码就行了,要理解整个工程要一点stm32的知识~

 

四、用传统蓝牙HC-06沟通单片机和APP

至此我们外部MCU算是真正打入到我们要控制的家电内部了!

接下来如何让其他设备,如手机做打入内部MCU的接线人呢-

这里我采用的是传统的蓝牙通信技术~

注:图中1、2、3、4分别为待黑家电的控制电路板、3路继电器电路板、HC-06蓝牙模块和STM32最小系统 

这里采用的蓝牙模块是一种传统的(非4.0)蓝牙串口模块~

附加讲解:

① 传统的蓝牙iPhone是不支持的,目前新款安卓智能机和iPhone用的是蓝牙4.0技术(不过安卓的也兼容非4.0蓝牙),我们常听说的iBeacon、智能手环啥的里面采用的是BLE技术(即:蓝牙低功耗技术,是基于标准蓝牙4.0协议栈做的低功耗版本)

② 蓝牙串口模块即你利用此模块操作蓝牙就像串口一样简单,模块中无需自己写任何蓝牙协议代码,只需要像串口一样将其上面的TXD连接到MCU的RXD,其上面的RXD连到MCU上的TXD,接下来MCU采用串口的方式便能达到和采用蓝牙一样的通信效果。

所以,上面代码中

USART_OUT(USART1,"Y");

  其实是通过蓝牙串口透传模块,将数据通给给了已经配对且连接的蓝牙设备了(如手机)~

那么当手机通过APP发送一条控制命令时,硬件是如何到的呢?

   同样的,由于是透传模块,远端通过蓝牙发送过来的数据也会在相应的串口中断中收到~

   这里的控制命令有3种:

    'a'+0x0d+0x0a  表示模拟按动按键1

    'b'+0x0d+0x0a  表示模拟按动按键2

    'c'+0x0d+0x0a  表示模拟按动按键3  

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • JS组件系列——自己动手封装bootstrap-treegrid组件 - 懒得安分

    JS组件系列——自己动手封装bootstrap-treegrid组件 - 懒得安分

    2017-04-28 14:02

  • 调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加信息标注 - QISHUANG

    调取百度地图接口,实现取自己的实时位置,然后可以在百度地图上添加

    2017-04-18 10:02

  • 我问我自己,你究竟想成为一个什么样的人? - Felix_ICanFixIt

    我问我自己,你究竟想成为一个什么样的人? - Felix_ICanFixIt

    2017-03-01 08:00

  • 《年终总结》工作三年多,来来回回,跌跌撞撞,总结批评一下自己这三年半。 - 受戒人

    《年终总结》工作三年多,来来回回,跌跌撞撞,总结批评一下自己这三

    2017-01-05 11:00

网友点评
e