收藏官网首页
楼主: 夏天罂粟

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

 

8

主题

38

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
19211
12#
 楼主| 发表于 2016-8-25 22:39:38 | 只看该作者
免费使用STM32、APP自动代码生成工具
林林 发表于 2016-8-25 09:41
做的不错!!!

谢谢!!

3

主题

253

帖子

432

积分

中级会员

Rank: 3Rank: 3

积分
432
11#
发表于 2016-8-25 16:51:20 | 只看该作者
又一大作,看起来棒棒哒

3

主题

10

帖子

126

积分

注册会员

Rank: 2

积分
126
9#
发表于 2016-8-24 10:38:28 | 只看该作者
这么冷清。。。我来顶一个

8

主题

38

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
19211
8#
 楼主| 发表于 2016-8-22 17:54:56 | 只看该作者
汉枫LPB120模块
本帖最后由 夏天罂粟 于 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就完成了。


(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要写东西太多了,我只能简单写写。如果有什么新体会后面再补充。



8

主题

38

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
19211
7#
 楼主| 发表于 2016-8-22 17:40:47 | 只看该作者
本帖最后由 夏天罂粟 于 2016-8-22 17:44 编辑
夏天** 发表于 2016-8-22 17:23
四、设备数据点定义篇
       温控器主要的操作有
      (1)冷水阀、热水阀的通断(四管制),用户理解 ...

五、MCU代码篇   
  (1)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();
    }
}


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






8

主题

38

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
19211
6#
 楼主| 发表于 2016-8-22 17:23:32 | 只看该作者
夏天罂粟 发表于 2016-8-22 16:56
三、硬件篇(焊接完成)
      (1)补充一下PCB布板图 反面

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

下图为设备数据点图




8

主题

38

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
19211
5#
 楼主| 发表于 2016-8-22 16:56:38 | 只看该作者
夏天罂粟 发表于 2016-8-21 10:00
二、硬件篇

产品内部系统结构图

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

(2)PCB正面


(3)PCB 的3D图


(4)PCB焊接完成


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



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


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


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


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

3

主题

10

帖子

126

积分

注册会员

Rank: 2

积分
126
地板
发表于 2016-8-22 16:51:47 | 只看该作者
我也来顶一下

563

主题

1222

帖子

8097

积分

版主

Rank: 7Rank: 7Rank: 7

积分
8097
板凳
发表于 2016-8-21 15:58:52 | 只看该作者
教您5分钟接入机智云,实现傻瓜式开发

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

8

主题

38

帖子

1万

积分

论坛元老

Rank: 8Rank: 8

积分
19211
沙发
 楼主| 发表于 2016-8-21 10:00:36 | 只看该作者
本帖最后由 夏天罂粟 于 2016-8-22 20:04 编辑

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

产品内部系统结构图




1 电源DCDC部分
12V转4.5V。开关电源是12V输出,继电器用的是12V类型的

2、主芯片
Stm32F103C8T6


3、晶振



4、Cypress的触摸芯片

5、电平转换芯片

6、段式液晶驱动芯片

7、蜂鸣器驱动
8、ESP8266WIFI模块

主要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元





8

主题

42

帖子

1666

积分

金牌会员

Rank: 6Rank: 6

积分
1666
楼主
发表于 2016-8-19 20:27:02 | 只看该作者
顶起,楼主加油!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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