收藏官网首页
查看: 19326|回复: 327

【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)

 

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
发表于 2016-8-19 19:47:39 | 显示全部楼层 |阅读模式
教您5分钟接入机智云,实现傻瓜式开发
本帖最后由 Genius 于 2017-4-28 12:12 编辑

智能温控器特点: 能够使办公环境更舒适,空调更节能,自动调节温湿度,这一切后建筑更绿色…
原创声 明,转载请注明出处:http://club.gizwits.com/thread-3332-1-1.html
机智云智能硬件创新大赛:http://club.gizwits.com/thread-2646-1-1.html
作者:夏天罂 粟      看到机智云的这个活动有点晚,犹豫是否要参加一下这个活动。不管是否能完成,我申请几块开发板了,支持一下机智云,同时也熟悉一下机智云的各个开发环节,后面会提出一些建议。周日(8月14日)才把PCB投出,周四回来焊接组装,正在调试。言归正传,我要做的是一个简单实用的产品。智能温控器。
      
产品功能: 控制中央空调风机盘管的通断阀,风机高中低转速。
应用环境: 楼宇中央空调的风机盘管控制,可以运用于写字楼、工厂等环境。

应用场景
        (1)夏天天气温度比较高,早上到办公室打开办公室空调,室内温度需要很长时间才能降下来。用户可以通过智能温控器把中央空调提前打开。
        (2)有时候下班时忘记关闭空调,可以通过手机软件关闭,或者在温控器设置定时关闭。
       (3)办公室、厂房空间比较大,温控器采样温度与出口温度不一致,用户可以通过手机软件设定温度和风速进行微调。
       (4)为了防止有人故意把空调温度设置过低或者过高,可以通过手机APP将面板进行锁定。
        (5)结合机智云平台数据分析,物业利用温控器的开通时间进行合理收费,不需要根据办公面积收费。

后面会陆续把原理图、PCB、软件代码、APP的UI和APP代码上传上来。

[ 项目名称 ] 基于STM32esp8266的智能温控器
[
项目概述 ] 主要用于控制中央空调的风机。
[
硬件准备 ] 机智云gokit2开发板,壳体,烙铁和示波器等等。
[
使用软件环境
]
                    单片机开发:KEIL5.1
                    UI设计:AI
                   APP设计:Android Studio 2
[ 相关源码 ] 原理及PCB、MCU源码、APP源码(基于Android Studio2)

                原理及PCB ELC_CTRL_MB(v0.1).rar (1.83 MB, 下载次数: 2670)

1

主题

11

帖子

118

积分

注册会员

Rank: 2

积分
118
发表于 2017-6-17 11:13:17 | 显示全部楼层
楼主做的真不错,给楼主点赞

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-22 17:54:56 | 显示全部楼层
本帖最后由 夏天罂粟 于 2016-8-31 01:07 编辑
夏天** 发表于 2016-8-22 17:40
五、MCU代码篇   
  (1)MCU程序整体部分

六、APP界面UI部分

(1)登陆界面,取名智能温控器。 还有一个小绿叶,


      

登陆界面

登陆界面



(2)控制界面
主要模式切换,温度调整、风速调节和面板锁定。

控制界面

控制界面


绿色代表环保。



七、智能温控器APP设计

(1)    环境搭建
官方提供APP源码是基于Eclipse版本,发现ANDROID Studio 2非常强大,谷歌的确很厉害,就想法设法把源码导入到AS2里,最后发现开发APP还是很方便的。借助机智云的帮助文档,请教了同事,自己再捣鼓,期间遇到了不少问题,最后解决了。
本人提供Gokit2源码,无需再花费精力导入了,有问题欢迎指出来。

(2)    程序结构
用户只对界面编写和提供APP必要信息,一个简单APP就完成了。

APP结构图

APP结构图

(3)    添加APP必要信息
在\java\com\gizwits\openSource\CommonModule\GosConstant.java文件中修改自己在
// 在机智云开发者账号下申请的App_ID
public static final String App_ID ="6a790993c68c4ca1a35542c3da5fa4dd";
// 在机智云开发者账号下申请的App_Screct(必须与上述App_ID对应)
public static final String App_Screct = "05948ea8c30f47b7aa021b7d26e10ddd";
// 在机智云开发者账号下创建的产品ProductKey
public static final String device_ProductKey = "164286c6b98a4ff3bfc2e934d5c2bfdd";

(4)    APP的UI

代码结构

代码结构
将做好的界面切图,生成PNG格式,保存在drawable-xhdpi文件夹中。
然后在layout中编写界面,格式xml。

(5)    如果是简单的界面,可以直接用Design界面进行拖拉。
如果比较复杂,在text中编写,一般新手会在这儿费力气,建议先学习一下格式,我也花费不少时间。这个地方Android Studio优势就明显了,无需运行就能看到界面。

界面编写

界面编写
就说明一下智能按钮(雪花),这是一个图片,没有搞多复杂。<ImageView
   
android:id="@+id/mode_cool"   // ID名称 JAVA代码中需要用到
   
android:layout_width="wrap_content"
   
android:layout_height="wrap_content"
   
android:gravity="center"
   
android:src="@drawable/cool"/>   // 图片名称,保存在
drawable-xhdpi文件夹中

(6)    程序实现
就拿Gokit源码中\ControlModule\GosDeviceControlActivity.java进行了修改
举个简单按钮,按键制冷模式。
在初始化initViews()里对按键进行初始化,  
   modeCool = (ImageView) findViewById(R.id.mode_cool);

在初始化事件里initEvents()对按键进行监听

modeCool.setOnClickListener(new OnClickListener() {   @Override
   
public void onClick(View v) {   

  try {         
                sendJson(KEY_MODE, 0); //发送数据到机智云           
                 modeSet.setText("制冷");

             }
catch (JSONException e) {


         e.printStackTrace();      }
   }


});


这样按键功能就实现了。
如果需要更新按键状态,handler里case UPDATE_UI:
增加对某个要刷新数据。
Handler handler = new Handler() {  

(7)    关于调试
可以利用机智云的虚拟设备进行调试APP,这个是非常方便的。硬件没有问题了,再进行联调,这样好确定问题点在哪儿。
APP要写东西太多了,我只能简单写写。如果有什么新体会后面再补充。



发表于 2017-1-6 10:42:00 | 显示全部楼层
淡积云 发表于 2016-9-1 17:07
支持下楼主的工作!很详细哦。特别是用了Android Studio。机智云给出的APP源码都是eclipse下开发的。很想知 ...

机智云APP开源框架的源码可快速开发配套app(目前提供ios、Andriod版本),不仅无缝的支持设备到设备的互联,还能完成不同类型的消息推送,如:邮件推送、短信推送、百度推送和极光推送。
Eclipse版本下载地址:https://github.com/gizwits/GizOpenSource_AppKit_Android/archive/master.zip
Android Studio版本下载地址:https://github.com/gizwits/GOpenSource_AppKit_Android_AS
介绍机智云开源框架(GizOpenSource_AppKit_Android) 是开源的适用于物联网的软件框架,用于无缝的支持设备到设备的互联。能帮助开发者快速构建物联网生态系统,实现设备间互联,加速智能设备的应用开发。其包含Wi-Fi类智能硬件app通用功能的一套源码。只要是使用机智云协议的产品,开发者开发配套的app时都可以直接使用该框架的源码实现快速开发,从而缩短app的开发周期短、降低开发成本。请注意:使用机智云物联网开源APP之前,需要先在机智云开发平台创建您自己的产品和应用。开源App需要使用您申请的AppId、AppSecret以及您自己的产品ProductKey才能正常运行。具体申请流程请参见:http://docs.gizwits.com/hc/
1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-22 17:40:47 | 显示全部楼层
注册成为机智云开发者,手机加虚拟设备快速开发
本帖最后由 夏天罂粟 于 2016-8-22 17:44 编辑
夏天** 发表于 2016-8-22 17:23
四、设备数据点定义篇
       温控器主要的操作有
      (1)冷水阀、热水阀的通断(四管制),用户理解 ...

五、MCU代码篇   
  (1)MCU程序整体部分

MCU程序总体

MCU程序总体


(2)MCU程序用户处理部分

用户处理部分

用户处理部分


(3)串口事件部分

串口处理流程

串口处理流程


(4) 处理用户部分代码
void userHandle(void)
{
    uint8_t ret  = 0;
    static uint32_t lcdLastTimer = 0;
    static uint32_t capLastTimer = 0;
    static uint8_t last_cap=0;
    uint8_t cap_id=0;
    static uint16_t cap_time_count=0;
        static uint16_t cap_time_count1=0;         
     if((gizwitsGetTimerCount()-lcdLastTimer) > LCD_TIME_MAX) //timeout = 2S
     {
                                touch_scan();
        
                static uint8 power_on=0;
                ReadADCPoll(&temperature_c);
                if(0x00 == power_on)
                {
                    power_on=1;
                    memset_my(g_showBuff, 0x00, sizeof(g_showBuff));
            //        show_mode_signal();
                    return;
                }
                show_temperature(temperature_c.cur_temp, RT);
                show_mode_signal();
            //    show_time();                      //20160122时间不准,去掉显示时间
                lcd_reload();   
                if(temperature_c.backlight > 0)
                {
                    temperature_c.backlight--;
                    lcd_backlight(temperature_c.backlight);
                }
               
                if(temperature_c.sync_delay > 0)
                {
                    temperature_c.sync_delay--;
                    if(0x00 == temperature_c.sync_delay)
                    {
                        temperature_c.sync_flag = 1;
                    }
                }

         lcdLastTimer = gizwitsGetTimerCount();
      }


      if((gizwitsGetTimerCount()-capLastTimer) > CAP_SCAN_PERIOD) //timeout = 2S
      {
                  auto_rev_opt(&temperature_c);
                  led_buzzer_ctrl(0,0);        
          cap_id=GET_TOUCH_NUMBER();
          if (last_cap!=cap_id)
          {
              last_cap =cap_id;
          }
          else
          {
              if (0!=cap_id)
              {
                cap_pad[cap_id- 1].touch = 1; //for relay ctrl
                led_buzzer_ctrl(logicch2phych[cap_id-1],1);
                led_buzzer_ctrl(5,1);
              }
          }
          if (cap_id == 1)
          {
              cap_time_count++;
              if (cap_time_count > 5000 / CAP_SCAN_PERIOD)
              {
                  gizwitsSetMode(SoftAp_Mode);
                  cap_time_count = 0;
                  lcd_init();
              }
          } else
          {
              cap_time_count = 0;
          }

          if (cap_id == 4)
          {
              cap_time_count1++;
              if (cap_time_count1 > 5000 / CAP_SCAN_PERIOD)
              {
                  gizwitsSetMode(AirLink_Mode);
                  cap_time_count1 = 0;
                  lcd_init();
              }
          } else
          {
              cap_time_count1 = 0;
          }
                  capLastTimer = gizwitsGetTimerCount();
      }
                        
}

(5)功能为触摸按键检测 、温度检测和 LCD刷新代码部分


void smart_frame(uint8_t cmd[],uint8_t buff[])
{
    uint8_t data[5],state=0;
        if ((cmd[0]!=9)&&(cmd[0]!=6)) return ;
    if (cmd[1]!=3) return ;
        if (cmd[3]!=0) return ;
        if (cmd[4]!=0) return ;
        IWDG->KR=0xaaaa;
    smart_frame_buff *wifi_data = (smart_frame_buff *)buff;
    if (wifi_data->action==0x02)
    {
        //read;
       send_state_frame();
        //state|=((temperature_c.temp_param.mode<<2)&0x12);
    }
    if (wifi_data->action==0x01)
    {
        if (wifi_data->attrr_flags&0x01)
        {
           temperature_c.temp_param.on_off=(((wifi_data->attrr_value_L & 0x01)!=0 )?1:0);
        }
        if (wifi_data->attrr_flags&0x02)
        {
            temperature_c.temp_param.lock=(((wifi_data->attrr_value_L&0x02)!=0)?1:0);
        }
        if (wifi_data->attrr_flags&0x04)
        {
            temperature_c.temp_param.mode=((wifi_data->attrr_value_L&0x0c)>>2);
        }
        if (wifi_data->attrr_flags&0x08)
        {
            temperature_c.temp_param.speed=((wifi_data->attrr_value_L&0x30)>>4);
        }
        if (wifi_data->attrr_flags&0x16)
        {
            temperature_c.temp_param.limit_t=BIN2BCD(wifi_data->attrr_value_H);
        }
        //write
                led_buzzer_ctrl(5,1);
                temperature_c.backlight = 60;
        ctrl_reply();
    }
}


详细代码请查阅本主题帖代码附件,谢谢!






6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-9-21 11:33:42 | 显示全部楼层
YSJason 发表于 2016-9-20 16:39
你好已经投票了  麻烦发一下Gokit APP for Android  Studio源码  QQ 527675007

你好!  在1楼有下载,  Gokit2.rar  这个就是。

8

主题

42

帖子

1679

积分

金牌会员

Rank: 6Rank: 6

积分
1679
发表于 2016-8-19 20:27:02 | 显示全部楼层
顶起,楼主加油!

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-21 10:00:36 | 显示全部楼层
本帖最后由 夏天罂粟 于 2016-8-22 20:04 编辑

二、硬件篇(结构图、原理图和主要BOM)

产品内部系统结构图

结构图.png


1 电源DCDC部分
12V转4.5V。开关电源是12V输出,继电器用的是12V类型的
power.png
2、主芯片
Stm32F103C8T6
主芯片.png

3、晶振

晶振.png

4、Cypress的触摸芯片
触摸芯片.png

5、电平转换芯片
电平转换芯片.png

6、段式液晶驱动芯片
段式液晶驱动芯片.png

7、蜂鸣器驱动
蜂鸣器.png
8、ESP8266WIFI模块
WIFI.png

主要BOM器件和成本估算
方案总体成本估算  60+元
1 MCU stm32           5
2 触摸芯片           2元
3 LCD驱动芯片         2元
4 LCD段式液晶         4元
5 NTC热敏电阻          1+元
6 继电器型号 7A?        5+元
7 液晶背光板(含液晶背光) 3元
8 WIFI模块           12元
9开关电源 及 DCDC      12元
10蜂鸣器             1元
11 壳体            10元





发表于 2016-8-21 15:58:52 | 显示全部楼层

小伙伴,你好。
你是第27个参赛者。
欢迎加入开源大赛群,一起交流讨论
机智云开源硬件大赛 583190709
1、机智云QQ群: 287087942
机智云爱好者-APP开发群: 599735135
QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随时掌握最新资讯和活动信息

3

主题

10

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2016-8-22 16:51:47 | 显示全部楼层
注册成为机智云开发者,手机加虚拟设备快速开发
我也来顶一下

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-22 16:56:38 | 显示全部楼层
夏天罂粟 发表于 2016-8-21 10:00
二、硬件篇

产品内部系统结构图

三、硬件篇(焊接完成)
      (1)补充一下PCB布板图 反面

温控器PCB反面

温控器PCB反面

(2)PCB正面

温控器PCB正面

温控器PCB正面


(3)PCB 的3D图

3D图1

3D图1

3D图2

3D图2


(4)PCB焊接完成

PCB焊机完成

PCB焊机完成


(5)PCB焊机水平还不错吧。 能看到ST和乐鑫的芯片模块。

放大PCB

放大PCB


(6)和电源主板相连接(借用公司的电源板,上面有开关电源、继电器和DCDC)

和电源连接图

和电源连接图


(7)PCB正面,触摸区域,NTC热敏电阻和段式液晶LCD

PCB正面图

PCB正面图


(8)点亮OK了,帅吧。壳体是阿里上的公模
IMG_1958.JPG

下片把MCU代码资源上传上来。期待着!!

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-22 17:23:32 | 显示全部楼层
夏天罂粟 发表于 2016-8-22 16:56
三、硬件篇(焊接完成)
      (1)补充一下PCB布板图 反面

四、设备数据点定义篇
       温控器主要的操作有
      (1)冷水阀、热水阀的通断(四管制),用户理解就是制冷制热
      (2)风速 高中低三速 调整
      (3)温度调节
      (4)WIFI功能模式切换,softAP 和 airlink模式
      (5)故障上报
      (6)面板锁定(手机下发命令)
      (7)低温保护, 低于5摄氏度时启动空调

下图为设备数据点图

数据点1

数据点1

数据点2

数据点2




3

主题

10

帖子

130

积分

注册会员

Rank: 2

积分
130
发表于 2016-8-24 10:38:28 | 显示全部楼层
这么冷清。。。我来顶一个

3

主题

253

帖子

685

积分

高级会员

Rank: 4

积分
685
发表于 2016-8-25 16:51:20 | 显示全部楼层
ESP8266模块首单6.8元
又一大作,看起来棒棒哒

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-25 22:39:38 | 显示全部楼层
林林 发表于 2016-8-25 09:41
做的不错!!!

谢谢!!

1

主题

220

帖子

1418

积分

金牌会员

Rank: 6Rank: 6

积分
1418
发表于 2016-8-26 10:55:30 | 显示全部楼层
不错不错,赞赞赞

6

主题

35

帖子

4281

积分

论坛元老

Rank: 8Rank: 8

积分
4281
 楼主| 发表于 2016-8-26 21:08:57 | 显示全部楼层

谢谢夸奖,请投我一票。

8

主题

42

帖子

1679

积分

金牌会员

Rank: 6Rank: 6

积分
1679
发表于 2016-8-29 11:12:05 | 显示全部楼层
免费使用STM32、APP自动代码生成工具
投啦投啦楼主

0

主题

1

帖子

326

积分

中级会员

Rank: 3Rank: 3

积分
326
发表于 2016-8-30 09:37:22 | 显示全部楼层
太好了,就是MCU的代码少几个C文件?编译不过去?

0

主题

14

帖子

1243

积分

金牌会员

Rank: 6Rank: 6

积分
1243
发表于 2016-8-30 14:31:49 | 显示全部楼层
设计的不错,挺有创意的。也很实用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

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