概述
首先说一下项目预期的目标,通过板载的WiFi模块联网获取天气信息,使用屏幕将信息显示出来,配合板载的语音模块播放当天天气状况。
总体的设计思路:天气获取的网站是心知天气网免费的API(需要注册),400次/小时的请求足够日常使用了,当然也可以使用付费接口那样能获取更多的信息。当开发板通过API接口发送请求时网站会返回json格式的信息,然后再通过json库将有用的信息解析出来,就能得到当天的天气信息了。然后将获取到的数据发送给屏幕进行处理,根据数据控制语音模块播放相应的语音文件。
下面简单的介绍一下心知天气的API
这个链接是获取实时天气状况
https://api.seniverse.com/v3/weather/now.json?key= APIPASSWORD &location= 地址 &language=返回的数据语言格式&unit= 温度单位
黑色加粗的部分是需要根据自己情况进行修改的。
当发送正确的请求后将会收到服务器返回的json数据
{"results":[{"location":{"id":"WX4FBXXFKE4F","name":"北京","country":"CN","path":"北京,北京,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now": {"text":"多云","code":"4","temperature":"25"} ,"last_update":"2017-04-14T12:20:00+08:00"}]}
黑色加粗就是我们需要解析的天气信息,本次需要用到的就这些了。更加详细的介绍请看 心知天气-天气数据API
这次我们用到的库有 ArduinoJson、ArduinoHttpClient、WiFi
最后的结果
总体的设计思路:天气获取的网站是心知天气网免费的API(需要注册),400次/小时的请求足够日常使用了,当然也可以使用付费接口那样能获取更多的信息。当开发板通过API接口发送请求时网站会返回json格式的信息,然后再通过json库将有用的信息解析出来,就能得到当天的天气信息了。然后将获取到的数据发送给屏幕进行处理,根据数据控制语音模块播放相应的语音文件。
下面简单的介绍一下心知天气的API
这个链接是获取实时天气状况
https://api.seniverse.com/v3/weather/now.json?key= APIPASSWORD &location= 地址 &language=返回的数据语言格式&unit= 温度单位
黑色加粗的部分是需要根据自己情况进行修改的。
当发送正确的请求后将会收到服务器返回的json数据
{"results":[{"location":{"id":"WX4FBXXFKE4F","name":"北京","country":"CN","path":"北京,北京,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now": {"text":"多云","code":"4","temperature":"25"} ,"last_update":"2017-04-14T12:20:00+08:00"}]}
黑色加粗就是我们需要解析的天气信息,本次需要用到的就这些了。更加详细的介绍请看 心知天气-天气数据API
这次我们用到的库有 ArduinoJson、ArduinoHttpClient、WiFi
首先我们需要在setup中连接上WiFi
Serial.begin(9600);
Serial.print("connect....");
while (WiFi.begin(ssid, pass) != WL_CONNECTED)
Serial.println("connected");
int httpCode = 0;
String httpData;
//发送http请求
httpCode = http.get("/v3/weather/now.json?key=" + APIPASSWORD + "&location=zhengzhou&language=en&unit=c");
//若是有返回就接收数据
if ( httpCode == 0)
{
Serial.println("startedRequest ok");
httpCode = http.responseStatusCode();
if (httpCode >= 0)
{
int bodyLen = http.contentLength();
//将接收到的字符存入string中,直到数据接收完毕
while ( (http.connected() || http.available()) && (!http.endOfBodyReached()))
{
if (http.available())
{
char c = http.read();
httpData += c;
}
else
delay(1000);
}
//提取出关于天气的那一段字符串
data = httpData.substring((httpData.indexOf(""now":") + 6), httpData.indexOf(","last"));
//通过json库解析出相应的数据
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(data);
temperature = root[String("temperature")];
code = root[String("code")];
}
}
else
Serial.print("Connect failed");
http.stop();
//串口打印出温度
Serial.print("temperature is :"):
Serial.println(temperature);
Serial.print("end");
最后的结果
转载于:https://www.cnblogs.com/FanMLei/p/10501044.html
最后
以上就是苹果电话为你收集整理的Arduino语音天气预报(一)的全部内容,希望文章能够帮你解决Arduino语音天气预报(一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复