搭建简易的物联网服务端和客户端-Maibu显示(九)
时间:2022-07-23
本文章向大家介绍搭建简易的物联网服务端和客户端-Maibu显示(九),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
刚好手边有块Maibu手表,所以,今天我们来让Maibu也来获取显示单片机的温湿度。 代码地址:https://github.com/klren0312/stm32_wifi 2017.3.24
Maibu显示
1.服务端提供接口
提供“/watch”接口
//手表推送
app.get('/watch',function(req,res){
var tem = [];
conn.query('SELECT * FROM env',function(err,rows,fields){
var tem = "{ "temhum" :" + """ + rows[rows.length-1].tem + " | "
+ rows[rows.length-1].hum + """ + "}";
res.send(tem);
})
})
2.Maibu手表
1)官方网站 http://www.maibu.cc/
2)官方开发者中心 http://dev.maibu.cc/developer/index_login.do
3)开发者文档 http://maibu.cc/api/welcome.html
3.手表代码
写的比较乱,这里只放出请求数据的代码。大家可以去我的github上看完整代码
1)数据请求函数
void data_request_web()
{
/*拼接url请求地址, 注意url的缓存大小*/
char url[200] = "";
sprintf(url, "%s", DATA_WEB);
/*发送一次*/
g_comm_id_web = maibu_comm_request_web(url, "temhum", 0);//过滤
}
2)界面初始化函数
P_Window init_btc_window()
{
static P_Window p_window;
P_Layer layer_background = NULL;
p_window = app_window_create();
if (NULL == p_window)
{
return NULL;
}
/*加入你的代码 begin*/
/*创建背景图层*/
layer_background = get_layer();
/*添加背景图层到窗口*/
app_window_add_layer(p_window, layer_background);
/* 添加时间栏 */
add_time_bar(p_window);
/*添加数据提示信息*/
GRect frame_tem = {{0, 30}, {16, 128}};
add_text_layer(p_window, &g_layer_id_tem, "温度", &frame_tem, GAlignLeft, U_ASCII_ARIAL_16, GColorWhite);
/*添加数据提示信息*/
GRect frame_hum = {{0, 30}, {16, 128}};
add_text_layer(p_window, &g_layer_id_hum, "湿度", &frame_hum, GAlignRight, U_ASCII_ARIAL_16, GColorWhite);
/*添加数据提示信息*/
GRect frame_zzes = {{0,110}, {16, 128}};
add_text_layer(p_window, &g_layer_id_zzes, "治电科技", &frame_zzes, GAlignBottom, U_ASCII_ARIAL_16, GColorWhite);
/*添加数据*/
GRect frame_data = {{0,60}, {16, 128}};
add_text_layer(p_window, &g_layer_id_data, "waiting", &frame_data, GAlignCenter , U_ASCII_ARIAL_42, GColorWhite);
return p_window;
}
3)更新数据函数
static void web_recv_callback(const uint8_t *buff, uint16_t size)
{
char stock_gid[10];
char i;
maibu_get_json_str(buff, "temhum", stock_gid, 10);//过滤
for (i=0;i<10;i++)
{
if (stock_gid[i]=='}')
{
stock_gid[i]=0;
}
}
/*添加数据*/
GRect frame_data = {{0,60}, {25, 128}};
add_text_layer(h_window, &g_layer_id_data, stock_gid, &frame_data, GAlignCenter , U_ASCII_ARIAL_20, GColorWhite);
app_window_update(h_window);
}
4.结果展示
1)模拟器
模拟器
2)手表表盘
maibu手表显示
@治电小白菜20170324
- Session和Cookies的基本原理
- 浅析Numpy.genfromtxt及File I/O讲解
- 损失函数详解
- 排查Java的内存问题
- 使用两种方法让 ASP.NET Core 实现遵循 HATEOAS 结构的 RESTful API
- 设计模式六大原则(5):迪米特法则
- Selenium2+python自动化61-Chrome浏览器(chromedriver)
- 区块链可以减少社会不平等吗?
- 【干货】不止准确率:为分类任务选择正确的机器学习度量指标(附代码实现)
- python爬虫beautifulsoup4系列1
- 区块链入门教程
- python爬虫beautifulsoup4系列2
- python爬虫beautifulsoup4系列3
- 多元回归模型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 逐行阅读Spring5.X源码(六) ClassPathBeanDefinitionScanner扫描器
- 逐行阅读Spring5.X源码(番外篇)自定义扫描器, Mybatis是如何利用spring完成Mapper扫描的
- 逐行阅读Spring5.X源码(七)扫描和注册神器 ConfigurationClassPostProcessor ,学此类者,胜过学九阳神功!胆小勿入!
- 「Mysql索引原理(三)」Mysql中的Hash索引原理
- RNN、lstm、gru详解
- 「Mysql索引原理(四)」单列索引
- 「Mysql索引原理(五)」多列索引
- 「Mysql索引原理(六)」聚簇索引
- 「Mysql索引原理(七)」覆盖索引
- 「Mysql索引原理(八)」使用索引扫描做排序
- 「Mysql索引原理(九)」前缀压缩索引
- 「Mysql索引原理(十)」冗余和重复索引
- 「Mysql索引原理(十一)」索引和锁
- 「Mysql索引原理(十二)」索引案例1-支持多种过滤条件
- 「Mysql索引原理(十三)」索引案例2-避免多个范围条件