【STM 32】之智能温控器(PCB、MCU源码和APP源码下载)
本帖最后由 Genius 于 2017-4-28 12:12 编辑智能温控器特点: 能够使办公环境更舒适,空调更节能,自动调节温湿度,这一切后建筑更绿色…
原创声 明,转载请注明出处:http://club.gizwits.com/thread-3332-1-1.html
机智云智能硬件创新大赛:http://club.gizwits.com/thread-2646-1-1.html
作者:夏天罂 粟 看到机智云的这个活动有点晚,犹豫是否要参加一下这个活动。不管是否能完成,我申请几块开发板了,支持一下机智云,同时也熟悉一下机智云的各个开发环节,后面会提出一些建议:P。周日(8月14日)才把PCB投出,周四回来焊接组装,正在调试。言归正传,我要做的是一个简单实用的产品。智能温控器。
产品功能: 控制中央空调风机盘管的通断阀,风机高中低转速。应用环境: 楼宇中央空调的风机盘管控制,可以运用于写字楼、工厂等环境。
应用场景: (1)夏天天气温度比较高,早上到办公室打开办公室空调,室内温度需要很长时间才能降下来。用户可以通过智能温控器把中央空调提前打开。 (2)有时候下班时忘记关闭空调,可以通过手机软件关闭,或者在温控器设置定时关闭。 (3)办公室、厂房空间比较大,温控器采样温度与出口温度不一致,用户可以通过手机软件设定温度和风速进行微调。 (4)为了防止有人故意把空调温度设置过低或者过高,可以通过手机APP将面板进行锁定。 (5)结合机智云平台数据分析,物业利用温控器的开通时间进行合理收费,不需要根据办公面积收费。
后面会陆续把原理图、PCB、软件代码、APP的UI和APP代码上传上来。
[ 项目名称 ] 基于STM32和ESP8266的智能温控器
[ 项目概述 ] 主要用于控制中央空调的风机。
[ 硬件准备 ] 机智云GOkit2开发板,壳体,烙铁和示波器等等。
[ 使用软件环境 ] 单片机开发:KEIL5.1 UI设计:AI APP设计:Android Studio 2
[ 相关源码 ] 原理及PCB、MCU源码、APP源码(基于Android Studio2)
原理及PCB MCU源码 APP源码(基于Android Studio2)
如果您需要Gokit APP for AndroidStudio源码,请投我一票,6号夏天** 智能温控器 我将发送给你。谢谢! 投票页面
[ 项目介绍 ] (1)视频1操作http://v.youku.com/v_show/id_XMTY5NTMxNjk3Mg==.html
(2)视频2 设备调试http://v.youku.com/v_show/id_XMTY5NTMxNzA1Ng==.html
(3)视频3 设备调试http://v.youku.com/v_show/id_XMTY5NTMxNzEwOA==.html
(4)做好的APP界面(基于GOkit的APP进行修改,还是用的机智云)
[ 详细介绍 ]
一、体系结构图
二、硬件篇(主要器件、BOM表和原理图)
三、硬件篇(焊接完成)
四、设备数据点定义篇
五、MCU代码篇
六、APP界面UI部分
七、APP程序篇(陆续补充中)
一、 体系结构图这里所说的温控器是楼宇中央空调的控制面板,是比较常见的面板。传统面板不带通讯模块,及时有也是RS485,用来统一控制,没有实质和用户打交道。这款智能温控器是在传统温控器基础之上增加了WIFI模块,用户通过APP或微信控制更加人性化,更加简单。
(1)智能温控器通过WIFI连接到机智云服务器,用户可以通过APP来设置和控制中央空调。(2)用户可以远程开启和关闭办公室空调。(3)管理员可以查看大楼空调运行情况,可以根据开启时间收费。(4)可以和楼宇BA控制系统对接,提升大楼智能化水平。(5)可以通过微信将设备控制权分享给同事。
目标: 办公环境更舒适,空调更节能,这一切后建筑更绿色…
二、硬件篇(结构图、原理图和主要BOM)
产品内部系统结构图
http://club.gizwits.com/data/attachment/forum/201608/21/095425ott70a9lmez7eht7.png
1 电源DCDC部分
12V转4.5V。开关电源是12V输出,继电器用的是12V类型的
http://club.gizwits.com/data/attachment/forum/201608/21/095423me1ijce9t314g3lg.png
2、主芯片
Stm32F103C8T6
http://club.gizwits.com/data/attachment/forum/201608/21/095426b9dc4rcg9p9rgpd6.png
3、晶振
http://club.gizwits.com/data/attachment/forum/201608/21/095425q3975z452yu5fcfg.png
4、Cypress的触摸芯片http://club.gizwits.com/data/attachment/forum/201608/21/095424x4bsn5cbnlvobnnn.png
5、电平转换芯片http://club.gizwits.com/data/attachment/forum/201608/21/095424egb5twoxq7hw1xub.png
6、段式液晶驱动芯片http://club.gizwits.com/data/attachment/forum/201608/21/095424nrllfbzke1bb1rvb.png
7、蜂鸣器驱动http://club.gizwits.com/data/attachment/forum/201608/21/095425rj7fufo74gfnu78j.png8、ESP8266WIFI模块http://club.gizwits.com/data/attachment/forum/201608/21/095423nz6i2t3nr6rmziq6.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元三、硬件篇(焊接完成)
(1)补充一下PCB布板图 反面
http://club.gizwits.com/data/attachment/forum/201608/22/164228jbrz2cgdicbbo2i9.png
(2)PCB正面
http://club.gizwits.com/data/attachment/forum/201608/22/164237ffm9gzku7fkau8us.png
(3)PCB 的3D图
http://club.gizwits.com/data/attachment/forum/201608/22/164537laea7vlremgzv6ug.pnghttp://club.gizwits.com/data/attachment/forum/201608/22/164544so5se8robez6shcs.png
(4)PCB焊接完成
http://club.gizwits.com/data/attachment/forum/201608/22/164752dllr0r8r6lhr4m4g.jpg
(5)PCB焊机水平还不错吧。 能看到ST和乐鑫的芯片模块。
http://club.gizwits.com/data/attachment/forum/201608/22/164922binntqbwvcmzvxti.jpg
(6)和电源主板相连接(借用公司的电源板,上面有开关电源、继电器和DCDC)
http://club.gizwits.com/data/attachment/forum/201608/22/164812t431zdjy4tyo4tyv.jpg
(7)PCB正面,触摸区域,NTC热敏电阻和段式液晶LCD
http://club.gizwits.com/data/attachment/forum/201608/22/165235fjo0poin0np11kk3.jpg
(8)点亮OK了,帅吧。壳体是阿里上的公模
http://club.gizwits.com/data/attachment/forum/201608/22/165407vkrkr9kn4ljev5vq.jpg IMG_1958.JPG (1.36 MB, 下载次数: 0)
下载附件
4 天前 上传
下片把MCU代码资源上传上来。期待着!!四、设备数据点定义篇
温控器主要的操作有
(1)冷水阀、热水阀的通断(四管制),用户理解就是制冷制热
(2)风速 高中低三速 调整
(3)温度调节
(4)WIFI功能模式切换,softAP 和 airlink模式
(5)故障上报
(6)面板锁定(手机下发命令)
(7)低温保护, 低于5摄氏度时启动空调
下图为设备数据点图
http://club.gizwits.com/data/attachment/forum/201608/22/172223a2zm3b1bft6aejja.jpghttp://club.gizwits.com/data/attachment/forum/201608/22/172227v7u36euii3ie55ux.jpg 五、MCU代码篇
(1)MCU程序整体部分
http://club.gizwits.com/data/attachment/forum/201608/22/173444atlhp3pl78x1jt3r.jpg
(2)MCU程序用户处理部分
http://club.gizwits.com/data/attachment/forum/201608/22/173522pbwb9o8qacqofppn.jpg
(3)串口事件部分
http://club.gizwits.com/data/attachment/forum/201608/22/173551ebzkj0zdbx8xu2kb.jpg
(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.touch = 1; //for relay ctrl
led_buzzer_ctrl(logicch2phych,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,state=0;
if ((cmd!=9)&&(cmd!=6)) return ;
if (cmd!=3) return ;
if (cmd!=0) return ;
if (cmd!=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();
}
}
详细代码请查阅本主题帖代码附件,谢谢!六、APP界面UI部分
(1)登陆界面,取名智能温控器。 还有一个小绿叶,:P。
http://club.gizwits.com/data/attachment/forum/201608/22/175210a8hp9rphp5rqpxkf.jpg
(2)控制界面
主要模式切换,温度调整、风速调节和面板锁定。
http://club.gizwits.com/data/attachment/forum/201608/22/175333jqo6iejiijeqjolo.jpg
绿色代表环保。 能把完整的硬件电路图发给我吗?还有能把几个缺失的硬件驱动程序和LCD段码屏的链接也发给我吗?分享到15838776438@163.com 楼主做的真不错,给楼主点赞 核心代码没有,装了一手好比 淡积云 发表于 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/。 YSJason 发表于 2016-9-20 16:39
你好已经投票了麻烦发一下Gokit APP for AndroidStudio源码QQ 527675007
你好!在1楼有下载,Gokit2.rar这个就是。 本帖最后由 夏天罂粟 于 2016-8-31 01:07 编辑
夏天** 发表于 2016-8-22 17:40
五、MCU代码篇
(1)MCU程序整体部分
六、APP界面UI部分
(1)登陆界面,取名智能温控器。 还有一个小绿叶,:P。
(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";
// 在机智云开发者账号下创建的产品ProductKeypublic 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要写东西太多了,我只能简单写写。如果有什么新体会后面再补充。
本帖最后由 夏天罂粟 于 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.touch = 1; //for relay ctrl
led_buzzer_ctrl(logicch2phych,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,state=0;
if ((cmd!=9)&&(cmd!=6)) return ;
if (cmd!=3) return ;
if (cmd!=0) return ;
if (cmd!=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();
}
}
详细代码请查阅本主题帖代码附件,谢谢!
:loveliness:顶起,楼主加油! 本帖最后由 夏天罂粟 于 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元
小伙伴,你好。
你是第27个参赛者。
欢迎加入开源大赛群,一起交流讨论
机智云开源硬件大赛 583190709 我也来顶一下 :loveliness: 夏天罂粟 发表于 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代码资源上传上来。期待着!!
夏天罂粟 发表于 2016-8-22 16:56
三、硬件篇(焊接完成)
(1)补充一下PCB布板图 反面
四、设备数据点定义篇
温控器主要的操作有
(1)冷水阀、热水阀的通断(四管制),用户理解就是制冷制热
(2)风速 高中低三速 调整
(3)温度调节
(4)WIFI功能模式切换,softAP 和 airlink模式
(5)故障上报
(6)面板锁定(手机下发命令)
(7)低温保护, 低于5摄氏度时启动空调
下图为设备数据点图
这么冷清。。。我来顶一个:lol 做的不错!!! 又一大作,看起来棒棒哒:lol 林林 发表于 2016-8-25 09:41
做的不错!!!
谢谢!! 不错不错,赞赞赞 牛牛牛呀 麦东东 发表于 2016-8-26 18:10
牛牛牛呀
谢谢夸奖,请投我一票。 投啦投啦楼主 太好了,就是MCU的代码少几个C文件?编译不过去? 顶起来!!~ 设计的不错,挺有创意的。也很实用。