Arduino语音天气预报(一)
来源:互联网 发布:java线程状态 编辑:程序博客网 时间:2024/06/05 21:57
首先说一下项目预期的目标,通过板载的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");
最后的结果
阅读全文
0 0
- Arduino语音天气预报(一)
- Arduino语音天气预报(二)
- Arduino语音天气预报(三)
- Arduino Uno LD3320语音模块应用(一)测试
- Arduino笔记(一)
- 天气预报--语音功能
- 天气预报--语音功能
- android天气预报应用(一)
- Android天气预报程序(一)
- 微信小程序(一)天气预报
- Arduino读写EEPROM(一)
- Arduino入门学习(一)
- arduino 学习笔记(一)
- 语音上传(一)
- Android天气预报应用设计(一)
- android天气预报应用开发(一)
- <Android 应用 之路> 天气预报(一)
- 天气预报的简单制作(一)
- 【ML学习笔记】11:Accuracy/FAR/FRR/Precision/Recall/ROC/AUC
- 扫雷
- Nginx 做JavaWeb负载均衡
- 微服务架构中模块划分和服务识别
- 微信小程序一个你可能需要的功能
- Arduino语音天气预报(一)
- Windowing Functions In Hive
- Spark学习笔记1-RDD编程
- 信数金服决策引擎分享(三):如何实现决策的协同维护?
- 移动web(三)touch事件详解
- C语言实现动态顺序表
- 两个人聪明人的空城——《司马懿之虎啸龙吟》
- 学习笔记—bootstrap(2)
- HTTP方法