Bluno Beetle免费试用 - 交作业 - 便携GPS
在此之前, 制作过GPRS+GPS实时获取卫星坐标上传服务器, 显示轨迹的例子, 但很不幸地, 因未考虑车辆输出电流过大的问题, 测试几天后GPRS因电流过大烧(炸)了...{:5_161:}停滞了一段时间后, 正巧碰上DFRobot开展Bluno beetle免费试用被我申请试用成功!(在此感谢@Ashley), 于是把剩下的GPS ublox模块利用上, 主控换成Bluno beetle, 再加上一个普通的TF读卡模块开工!(这货适合于无手机, 或无手机信号时, 又需要记录GPS轨迹的地方)
有了蓝牙, 一下子解决了数据联网上传的问题
使用场景介绍:场景一: 室外,且无手机
便携GPS插上电池(充电宝)在室外活动, 收集坐标数据,记录轨迹.场景二: 室外/室内, 有手机
便携GPS发现有配对成功的手机在通信范围, 互相握手成功, 便携GPS把存在TF卡上的数据传输给手机, 手机接收完毕后自动上传到云服务器最后通过WEB可以查看地图上的活动轨迹.
所需材料:
Bluno Beetle主控
GPS ublox模块 NEO-6M
Risym Micro SD卡模块 TF卡读写卡器 SPI接口TF卡一枚
220欧姆电阻
蓝色LED
固定底座(3D打印)
Android手机一部(注:需支持蓝牙4.0以上)
3D打印 - 设计
最初设计多层
第2版, 加高了底座
正面, GPS/TF模块螺丝孔
底面
接线设计:
Bluno Beetle GPS
4 RX
5 TX
5V VCC
GND GND
Bluno Beetle TF模块(SPI)
5V VCC
GND GND
SCK SCK
MOSI MOSI
MISO MISO
3 CSBluno Beetle LED
2 电阻-LED正极(长脚)
GND LED负极
附上Bluno Beetle的SPI接线图
此处焊点较小, 需小心处理
上一张焊接细节
程序:这里主要讲几个细节, 有兴趣的小伙伴想要完整程序请在文后下载1.在Setup里, 对TF卡模块需要检测有效性:
if (!SD.begin(3)) {
while(!SD.begin(3)){ledFlicker(2);delay(1000);}
}
2.由于GPS接的是软串口, 考虑到串口监听的问题, 需要在调用GPS时先Listen一下:
gps.listen();delay(2);
3.GPS数据抓去以及模块的一些简单知识
NMEA-0183 协议简介
NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备 制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议。
NMEA-0183协议采用ASCII码来传递GPS定位信息,我们称之为帧。
帧格式形如:$aaccc,ddd,ddd,„,ddd*hh(CR)(LF)
GPS模块会返回多种不同的帧数据,我们在本例中重点关注$GPRMC:
$GPRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data)
$GPRMC语句的基本格式如下:
$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)
(1) UTC时间,hhmmss(时分秒)
(2) 定位状态,A=有效定位,V=无效定位
(3) 纬度ddmm.mmmmm(度分)
(4) 纬度半球N(北半球)或S(南半球)
(5) 经度dddmm.mmmmm(度分)
(6) 经度半球E(东经)或W(西经)
(7) 地面速率(000.0~999.9节)
(8) 地面航向(000.0~359.9度,以真北方为参考基准)
(9) UTC日期,ddmmyy(日月年)
(10)磁偏角(000.0~180.0度,前导位数不足则补0)
(11) 磁偏角方向,E(东)或W(西)
(12) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78从GPS模块中取数据代码如下(本例中只取$GPRMC数据):
(...................代码上传多次,排版全乱,只好删除, 要看代码的请在文后下载)
4.蓝牙模块部分
此部分涉及到与手机App交互, 较为复杂4.1 手机App部分
- App驻留后台自动运行, 并自动搜索便携GPS是否在附近, 如果在, 则发送握手指令, 如果握手成功, 则开始接收数据存放在手机中
- 每天在固定时间,把存在手机中的数据上传到云服务器4.2 便携GPS部分
蓝牙通信由于直接连接在Atmega328的串口上的, 所以在透传模式下, 直接调用Serial.print和Serial.write就能把数据通过蓝牙传输出去, 相当方便.
- 监听蓝牙信号, 如果发现有握手请求, 则应答并完成握手过程
<font color="rgb(51, 51, 51)">
/**
* try connect to app, shake hands
* flow:AA -> BB -> 1
*/
void connectToApp(){
int wait_time = 0;
boolean isTry = 0;
while(wait_time<=2){
getBluetoothData(); //listen app shake hands 'AA'
if(_comdata=="A"){isTry=1;break;} //is not shake hands data
wait_time++;
delay(1000);
}
//Serial.print("isTry:");Serial.println(isTry);
if(isTry!=1)return;
wait_time=0;
delay(100);Serial.println("!B#"); //握手请求
while(wait_time<=5){
getBluetoothData();
if(_comdata.length()>2)_comdata=_comdata.substring(0,2);
if(_comdata=="1"){ //成功连接通信
_is_connect = 1;
Serial.print("Bluetooth build communication successfully.");
break;
}
wait_time++;delay(1000);
}
if(wait_time>5)Serial.println("time out");
}</font>
- 蓝牙连接成功时, 开始上传TF卡中的数据, 上传成功的话自动清除本地数据. (...................代码上传多次,排版全乱,只好删除, 要看代码的请在文后下载)
5.完整流程图
实物效果图
主控没螺丝孔, 暂时固定不了
换个角度
最后展示一下周末收集的数据效果图{:5_165:}
附上程序以及一些实用资料
李旭东 发表于 2017-11-16 09:43
我想请教一下,我看楼主在上面说用的百度地图的API,GPS定位坐标和百度地图坐标之间不是要转换的吗,楼主是 ...
是用了一个translateCallback的方法, 给你一个我用的样例代码
translateCallback = function (data) {
if (data.status === 0) {
bm.clearOverlays();
bm.setCenter(data.points, 15);
marker = new BMap.Marker(data.points);
bm.addOverlay(marker);
marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
var labelgg = new BMap.Label("i30现在的位置"+_center_time, {offset: new BMap.Size(20, -10)});
marker.setLabel(labelgg);
}
}
var _center_lat = 0;var _center_lng=0; var _center_time=0;
function loadGPS() {
$.getJSON("/nj/iot/gps/tracert_realgps", function (data) {
_center_lat = data.lat;
_center_lng = data.lng;
_center_time = data.record_time;
//转换坐标为百度系
ggPoint = new BMap.Point(_center_lng, _center_lat);
var arr = new Array();
var convertor = new BMap.Convertor();
arr.push(ggPoint);
convertor.translate(arr, 1, 5, translateCallback);
setTimeout("loadGPS()", 10000);
});
}
loadGPS(); 绊 发表于 2018-12-21 12:29
楼主我想问下你最后的轨迹是怎么弄出来的啊?如何把GPS获取的坐标在百度地图上显示出来并且标记成轨迹啊? ...
你查一下百度地图的API, 官方有教程的, 不难 我想请教一下,我看楼主在上面说用的百度地图的API,GPS定位坐标和百度地图坐标之间不是要转换的吗,楼主是怎样转换的,那个转换公式能给我吗,或者当时的解决办法。谢谢了 这个排版我也是醉了....修正中 外壳大赞~ 超级牛掰 原来楼主住在天河区的啊 dsweiliang 发表于 2016-5-4 13:46
原来楼主住在天河区的啊
暴露了...:$ 大牛。。。 我的手机4.0蓝牙需要密码连接,请问你遇到了吗? gray6666 发表于 2016-5-6 21:19
我的手机4.0蓝牙需要密码连接,请问你遇到了吗?
默认密码是: 123456 学习了~ 厉害,厉害。。。 下载看看 看起来不是很难,感谢分享。 请问 是那个版本的IDE? 我想问一下,在地图上描点是怎么弄的,用了什么软件吗 膜拜{:5_190:} 还想请问一下楼主,传递数据的速度快吗? 你一共传了多少数据呢? 值得研究 楼主我想问下你最后的轨迹是怎么弄出来的啊?如何把GPS获取的坐标在百度地图上显示出来并且标记成轨迹啊?
页:
[1]
2