
立创机器狗
简介
基于esp8266的立创机器狗,根据嘉立创B站官方机器狗实训营视频进行复刻,适合小白以及根据B站视频复刻失败的小伙伴借鉴。
简介:基于esp8266的立创机器狗,根据嘉立创B站官方机器狗实训营视频进行复刻,适合小白以及根据B站视频复刻失败的小伙伴借鉴。开源协议
:GPL 3.0
描述
立创智能机器狗Robot Dog
根据嘉立创EDA官方项目【智能机器狗实训营】复刻
在复刻的过程中,官方演示视频存在一些影响程序正常运行的小BUG,本文对我发现的BUG进行了修正。
官方项目文档链接:https://wiki.lceda.cn/zh-hans/course-projects/smart-internet/eda-robot/eda-robot-introduce.html
嘉立创B站官方账号主页链接:https://space.bilibili.com/430536057/lists/1551345?type=season
前情提要
我也只是个小白,讲解中如有错误请见谅。本方案需要优先跟着B站账号【嘉立创eda】官方项目【智能机器狗实训营】学习之后再进行参考借鉴。
一、项目介绍
本项目基于ESP8266构建,通过wifi热点连接至手机,可以实现手机控制小狗的姿态、表情的桌面宠物,同时通过ntp协议连接至阿里云可实现实时更新时钟,通过心知天气提供的免费api接口实现获取全国三百多个地级市的天气与温度等信息。
硬件设计与软件设计
本项目的软硬件设计完全复刻嘉立创eda官方开源项目【智能机器狗实训营】,故在此处不进行详细介绍,详细请通过官方项目文档查看,此处仅对部分官方视频中容易出错与难理解部分进行解释。
一、硬件设计方面
1、在硬件设计中,官方pcb的板框中电池盒开孔位置错误,在实际设计开孔时应进行相应调整
根据官方板框制作的pcb示例图:

实际安装上电池盒后的示例图:

能够明显看出电池壳中间的两个开孔与pcb板上的开孔错位比较严重,同时与官方的3D外壳中固定螺丝孔也不完全匹配,会造成电池盒、pcb与3D外壳连接不稳固的情况,需自行调整。(本项目中未进行调整,采取的通过双面胶与热熔胶进行固定)
二、软件设计中的小问题
官方教学视频链接:https://www.bilibili.com/video/BV1DxfPYmEJS/?spm_id_from=333.1387.homepage.video_card.click&vd_source=c2d7a3b25832deea392683db4f2a6e1f
1、在官方的软件教学中,6-其他函数编写 中第13分50秒处,获取从心知天气返回的json串中白天的天气情况时,关键字出错。
官方视频截图:

心知天气API使用手册中返回的json串如下:
"results": [{
"location": {
"id": "WX4FBXXFKE4F",
"name": "北京",
"country": "CN",
"path": "北京,北京,中国",
"timezone": "Asia/Shanghai",
"timezone_offset": "+08:00"
},
"daily": [{ //返回指定days天数的结果
"date": "2015-09-20", //日期(该城市的本地时间)
"text_day": "多云", //白天天气现象文字
"code_day": "4", //白天天气现象代码
"text_night": "晴", //晚间天气现象文字
"code_night": "0", //晚间天气现象代码
"high": "26", //当天最高温度
"low": "17", //当天最低温度
"precip": "0", //降水概率,范围0~1,单位百分比(目前仅支持国内城市)
"wind_direction": "", //风向文字
"wind_direction_degree": "255", //风向角度,范围0~360
"wind_speed": "9.66", //风速,单位km/h(当unit=c时)、mph(当unit=f时)
"wind_scale": "", //风力等级
"rainfall": "0.0", //降水量,单位mm(目前仅支持国内城市)
"humidity": "76" //相对湿度,0~100,单位为百分比
}, {
"date": "2015-09-21",
"text_day": "晴",
"code_day": "0",
"text_night": "晴",
"code_night": "0",
"high": "27",
"low": "17",
"precip": "0",
"wind_direction": "",
"wind_direction_degree": "157",
"wind_speed": "17.7",
"wind_scale": "3",
"rainfall": "0.0",
"humidity": "76"
}, {
... //更多返回结果
}],
"last_update": "2015-09-20T18:00:00+08:00" //数据更新时间(该城市的本地时间)
}]
}
官方视频中是想要获取白天天气现象文字,关键字应该是"text_day",官方教学视频的错误会导致无法获取正确的天气信息。
2、官方教程中仅获取了当天的最高温度,但实际的气温应该是一个区间,故我们应该对该部分代码做点小修改,能够获取当天的最高温度与最低温度并显示出来。
官方视频截图:

修改后的代码示例:
{
if (initweather == false)
{
Serial.println("initweather=false");
if (WiFi.status() == WL_CONNECTED)
{
Serial.println("wifi connected");
WiFiClient client;
HTTPClient http;
String myurl;
myurl = weatherAPIURL + weatherapi + "&location=" + cityname + "&language=zh-Hans&unit=c&start=0&day=1";
Serial.println(myurl);
if (http.begin(client,myurl))
{
Serial.println("http.begin yes");
int httpCode = http.GET();
Serial.println(httpCode);
if (http.GET())
{
String payload = http.getString();
Serial.println("get payload:"+payload);
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
String temperature2 = doc["results"][0]["daily"][0]["high"];
String temperature3 = doc["results"][0]["daily"][0]["low"];
String humidity2 = doc["results"][0]["daily"][0]["humidity"];
String weather2 = doc["results"][0]["daily"][0]["code_day"];
String weather3 = doc["results"][0]["daily"][0]["code_night"];
temperature = temperature3+"~"+temperature2;
humidity = humidity2;
weather_code_day = weather2;
weather_code_night = weather3;
initweather = true;
Serial.print("get weather:"+weather_code_day+"and"+weather_code_night);
}
else
{
Serial.printf("error1", http.errorToString(httpCode).c_str());
}
http.end();
}
//else
//{
// Serial.printf("error2");
//}
}
}
全局变量的weather=当日最低温度~当日最高温度,能够更好的显示我们所需的信息。同时此处使用了白天天气现象代码与晚间天气现象代码来判断当日天气现象,对比官方代码能做到对天气现象进行更详细的区分,为后续完善天气显示功能提前做准备。
3、在官方的软件教学中,6-其他函数编写 中第26分15秒处,显示湿度时,官方视频中小失误变量名出错,会导致湿度显示没有百分号,我们将绿色箭头的变量名"humidity"改为"hum"即可。
官方视频截图

4、在官方的软件教学中,6-其他函数编写 中第27分07秒处,官方视频中本来HTTPClient http还有报错,但27分09秒瞬间就没有报错了,很多小伙伴不知道是怎么回事,一直纠结为啥跟着官方视频做无法复刻。其实这里官方视频进行了剪辑,在头文件中引入了一个
#include
但是被剪辑掉了,我们把这个头文件添加上即可正常。(ps:当时我在这里花了好多时间找突然无报错的原因,本身就是个小白,没空看直播,全靠视频学习,结果还剪辑这么关键的地方,哭了呜呜呜~)
官方视频截图:


5、最后是程序烧录部分。一开始官方视频中说USB转TTL模块只需要连接GND、TX和RX,无需接3.3V,打开电源开关即可。但是后面教学又说不需要打开电源,连接上3.3V即可。但可能是我的USB转TTL模块比较差,不打开电源开关无法正常烧录程序并且esp8266上不会闪灯或灯光很暗,疑是供电不足,这时候只需要打开电源开关,让电池参与供电即可正常烧录,有同样情况无法烧录程序的小伙伴可以参考借鉴一下此方法。
总结
我的硬件设计是完全复刻的官方项目文件,仅将部分插件原件改为了贴片原件。软件设计是根据官方B站视频进行学习复刻。3D外壳直接使用的官方文件。故在本文中介绍不多,大家直接参考官方项目文件即可。获取天气部分需先注册一个心知天气的账号,获取免费版的接口后会给你一个密钥,通过该密钥即可正常获取天气,并且心知天气提供了详细的接口文档,方便我们对天气部分做后续的开发,让我们的小狗能够显示更详细的天气情况,如:实时天气与温度、未来3天天气信息、风向、风速、降水量、穿衣、紫外线强度、洗车、旅游、感冒、运动等等信息。
附显示时间与显示天气图片以及演示视频:


演示视频1-开机-配网
演示视频2-运动控制-表情控制-获取时间-获取天气
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。









