查看: 3767|回复: 2

[原创] 涂鸦TYDE3.0开发板——温度控制

[复制链接]
  • TA的每日心情
    开心
    2018-2-18 22:25
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2018-2-27 10:34:11 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 回到原点123 于 2018-2-27 10:34 编辑

      
    由于放假在家,手里面什么模块都没有,所以只能做一些简单的了!

                                              害羞.jpg

    这次我准备通过咱们的涂鸦板 检测温度,上云,然后控制

    目标是:首先检测周围环境温度,然后上传云端;当温度比APP设定值大的时候,开启LED2。(用LED模拟继电器)

    尴尬的是我手头上没有温湿度检测模块,所以想别的办法了。

    我用的是另一个板子的MPU6050测出来的温度(之前我还不知道STM32有自带的温度传感器,可以检测芯片温度,看到ddllxxrr的帖子我才知道STM32还有这个功能)

                                              好尴尬

                                            啪.jpg
      

    原理是通过另一个板子的MPU6050模块测出温度值,然后通过串口传送给涂鸦板,然后上云,控制.


    流程.png


          首先去涂鸦官网上创建产品、设置数据点、选择APP界面、下载MCU开发包。




    数据点.png



    APP界面.png


    下载MCU.png


    然后移植SDK,(按照readme里面 和 程序里面的注释 操作就好了。)

    之后加上串口通讯接受温度的程序就好了;


    1. <font size="1">void uart2_init(u32 bound){
    2.   //GPIO¶Ë¿ÚÉèÖÃ
    3.   GPIO_InitTypeDef GPIO_InitStructure;
    4.         USART_InitTypeDef USART_InitStructure;
    5.         NVIC_InitTypeDef NVIC_InitStructure;
    6.          
    7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);        //ʹÄÜUSART1£¬GPIOAʱÖÓ
    8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);        //ʹÄÜUSART2
    9.   
    10.         //USART2_TX   GPIOA.2
    11.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
    12.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    13.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        //¸´ÓÃÍÆÍìÊä³ö
    14.   GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.2
    15.    
    16.   //USART2_RX          GPIOA.3³õʼ»¯
    17.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA10
    18.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿ÕÊäÈë
    19.   GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯GPIOA.3  

    20.   //Usart2 NVIC ÅäÖÃ
    21.   NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    22.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//ÇÀÕ¼ÓÅÏȼ¶3
    23.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;                //×ÓÓÅÏȼ¶3
    24.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQͨµÀʹÄÜ
    25.         NVIC_Init(&NVIC_InitStructure);        //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷
    26.   
    27.    //USART ³õʼ»¯ÉèÖÃ

    28.         USART_InitStructure.USART_BaudRate = bound;//´®¿Ú²¨ÌØÂÊ
    29.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
    30.         USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
    31.         USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
    32.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
    33.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //ÊÕ·¢Ä£Ê½

    34.   USART_Init(USART2, &USART_InitStructure); //³õʼ»¯´®¿Ú1
    35.   USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//¿ªÆô´®¿Ú½ÓÊÜÖжÏ
    36.   USART_Cmd(USART2, ENABLE);                    //ʹÄÜ´®¿Ú1

    37. }



    38. void USART2_IRQHandler(void)                        //´®¿Ú2ÖжϷþÎñ³ÌÐò
    39.         {
    40.         u8 Res;
    41. #if SYSTEM_SUPPORT_OS                 //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS.
    42.         OSIntEnter();   
    43. #endif
    44.         if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏ(½ÓÊÕµ½µÄÊý¾Ý±ØÐëÊÇ0x0d 0x0a½áβ)
    45.                 {
    46.                 Res =USART_ReceiveData(USART2);        //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý
    47.                
    48.                 if((USART2_RX_STA&0x8000)==0)//½ÓÊÕδÍê³É
    49.                         {
    50.                         if(USART2_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d
    51.                                 {
    52.                                 if(Res!='D')USART2_RX_STA=0;//½ÓÊÕ´íÎó,ÖØпªÊ¼
    53.                                 else USART2_RX_STA|=0x8000;        //½ÓÊÕÍê³ÉÁË
    54.                                 }
    55.                         else //»¹Ã»ÊÕµ½0X0D
    56.                                 {        
    57.                                 if(Res=='E')USART2_RX_STA|=0x4000;
    58.                                 else
    59.                                         {
    60.                                         USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;
    61.                                         USART2_RX_STA++;
    62.                                         if(USART2_RX_STA>(USART_REC_LEN-1))USART2_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ         
    63.                                         }                 
    64.                                 }
    65.                         }                    
    66.      } </font>
    复制代码

    中断服务函数里面以‘’ED’为数据传输结束标志位,收到'ED'则表示一次温度接受完成。


    1.    <font size="1">if(USART2_RX_STA&0x8000)
    2.                 {                                          
    3.                         len=USART2_RX_STA&0x3fff;//µÃµ½´Ë´Î½ÓÊÕµ½µÄÊý¾Ý³¤¶È
    4.                         printf("\r\nÄú·¢Ë͵ÄÏûϢΪ:\r\n\r\n");
    5.                         printf("%d\r\n",len);
    6.                         temperature=0;
    7.                         temperature=USART2_RX_BUF[12]-'0'+(USART2_RX_BUF[11]-'0')*10;
    8.         //                for(t=0;t<len;t++)
    9.         //                {
    10. //                         temperature=atoi(USART2_RX_BUF);
    11.         //                        temperature=temperature*10+USART2_RX_BUF[t];
    12.         //                }

    13.                         printf("%d",temperature);
    14.                         USART2_RX_STA=0;
    15.                 }</font>
    16.                
    复制代码
    把接受到的温度值,提取出来.





    这个是串口调试助手收到的 温度值,第二行是数据长度,第三行是温度值。(由于是杜邦线连接,传输有时候不稳定

    串口.png

    这个是APP操作界面。

    APP1.jpg

    下面是视频演示效果。





    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-10-1 12:54
  • 签到天数: 313 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2018-3-1 21:20:29 来自手机 | 显示全部楼层
    mpu6050还能检测温度?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-2-18 22:25
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2018-3-4 13:17:39 | 显示全部楼层
    嗯啊,就像我不知道STM32也就可以测温度一样
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-20 06:31 , Processed in 0.164804 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.