打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Blynk连续剧第三集:blynk的bridge在8266上显示蓝牙心率带数据
沧海笑1122版主 2017-5-1 00:31
楼主
本帖最后由 沧海笑1122 于 2017-5-1 00:41 编辑
Blynk连续剧第三集:使用blynk的bridge控件在8266上显示蓝牙心率数据
【回顾前几集的剧情】
第一集:我们用DFRobot的beetle BLE搭建了第一个blynk应用,在blynk APP上显示了来自计步器的步伐数据。并且简要介绍了blynk这个优秀的项目。
http://www.arduino.cn/thread-45285-1-1.html
第二集:我们用arduino101加上blynk,实现了在blynkAPP上显示来自101采集的蓝牙心率带数据。戏是演完了,但是由于“演员”不给力(101的以太网连接与blynk配合不好),只好将就修改剧本,让101通过USB--PC这样的组合连接blynk server,受到了很多玩家的疑问。
http://www.arduino.cn/thread-45299-1-1.html
【本集剧情简介】
上回书说到,我们使用arduino101+blynk,成功提取了BLE心率带数据,并且在blynk APP上成功显示。很多小伙伴都提出,在手机APP上显示心率,需要那么麻烦吗?悦跑圈APP本身就可以呀,还需要用arduino 101绕一圈吗?
本文就要尝试,在上文的基础上,使用blynk的bridge控件在esp8266上,驱动0.66寸oled显示蓝牙心率数据。因此本场硬件主角是esp8266,而软件主角则是新出场的blynk的bridge控件。
【演员表】
【硬件演员(男演员)】
男一号:D1 mini(esp8266 12F)  (本集新演员)
男二号:arduino 101(老演员了,为了给新手搭戏,屈居二号)
男三号:D1 mini之0.66 寸oled (本集新演员)
0.66寸可以直接叠装在d1 mini上,分辨率是64*48,ssd1306的芯片
【软件演员(女演员)】
女一号:blynk的bridge控件
(听听blynk官方对这位大咖怎么描述:http://docs.blynk.cc/#widgets-other-bridge
这是她的定妆照。
Bridge can be used for Device-to-Devicecommunication (no app. involved). You can send digital/analog/virtual writecommands from one device to another, knowing it’s auth token. At the momentBridge widget is not required on application side (it is mostly used forindication that we have such feature).
You can use multiple bridgesto control multiple devices.
女二号:D1 mini之0.66 寸oled库https://github.com/sparkfun/SparkFun_Micro_OLED_Arduino_Library
(先后试了几位演员,u8glib是资深优秀演员,但是和8266架构不兼容,只好割爱,还有其他以前用过的库都不能满足64*48(0.66寸)的要求,最后还是采用了D1 MINI官方推荐的这位系出名门的sparkfun血统的micro_oled库)
【详情(剧本和剧照)】
第一幕:配置arduino 101侧代码
啃萝卜 - Make it easy!
/* * from https://github.com/wlogsky666/HeartRate_Service * arduino 101 central mode read BLE HR_belt KATO via USB serial * 去除不必要的注释,用D13来表示数据传输的状态 * 控制esp8266在oled上显示心率值 * 2017-04-23 *///101的BLE库读取心率带数据//然后通过USB--PC---blynk server#include <SoftwareSerial.h>SoftwareSerial DebugSerial(2, 3); // RX, TX#include <CurieBLE.h>#define BLYNK_PRINT DebugSerial#include <BlynkSimpleStream.h>BLEService heartRateService("180D"); // BLE Heart Rate Servicechar auth[] = "aac*****************0e"; //101的令牌WidgetBridge bridge1(V1);BLYNK_CONNECTED() { // Place the AuthToken of esp8266 bridge1.setAuthToken("4de***********26"); //esp8266的令牌,通过此句控制了8266}void setup() { Serial.begin(9600); DebugSerial.begin(9600); pinMode(13, OUTPUT); // indicate when a central is connected delay(10000); BLE.begin(); BLE.scan(); Blynk.begin(Serial, auth);//通过USB连接到PC,一是该PC必须与server能够可靠连接,二是sreial不能再有其他读写操作。所以我们注释了所有调试语句 }// the loop function runs over and over again forevervoid loop() { Blynk.run(); //调用blynk BLEDevice peripheral = BLE.available(); if (peripheral) { // discovered a peripheral // Serial.println("Discovered a peripheral"); // Serial.println("-----------------------"); // print address // Serial.print("Address: "); // Serial.println(peripheral.address()); if (peripheral.hasLocalName()) { // Serial.print("Local Name: "); // Serial.println(peripheral.localName()); } if (peripheral.hasAdvertisedServiceUuid()) { // Serial.print("Service UUID's: "); // for (int i = 0; i < peripheral.advertisedServiceUuidCount(); i++) { // Serial.print(peripheral.advertisedServiceUuid(i)); // Serial.print(" "); //} // Serial.println(); } // Try to connect if (peripheral.connect()) { // Serial.println("Connected"); digitalWrite(13, HIGH); // Once connected, make builtin LED lighten HeartRate(peripheral); } else { Serial.println("Failed to connect!"); } // Serial.println("Disconnect"); digitalWrite(13, LOW); // Disconnect signal BLE.scan();//这句作者没有,但必须加上,否则在scan失败后,程序停止 } delay(3000);}int timer = 0 ;void HeartRate(BLEDevice peripheral) { // discover peripheral attributes // Serial.println("Discovering attributes of service 0x180D ..."); if (peripheral.discoverAttributesByService("180D")) { // Serial.println("Attributes discovered"); //if(!peripheral.discoverAttributesByService("180F")) // Serial.println("Battery Attributes not discoverd"); } else { // Serial.println("Attribute discovery failed."); peripheral.disconnect(); return; } BLECharacteristic heartrate = peripheral.characteristic("2A37"); // UUID of heartrate service is 2A37 if( !heartrate ) // Service not exist { // Serial.println("No HeartRate Service..."); return ; } if( !heartrate.subscribe() ) { // Serial.println("Cannot Subscribe HeartRate Service..."); return ; } while( peripheral.connected() ){ timer ++; if( timer > 1000000&& heartrate.read() &&heartrate.valueUpdated() ) { timer = 0; // Serial.print("Heartrate : "); // int v1=(int)((char*)heartrate.value())[1]; //Serial.print(v1); digitalWrite(13, HIGH); // Blynk.virtualWrite(V1,(int)((char*)heartrate.value())[1]);//将bpm赋值给虚拟pin V1,用于图形显示 Blynk.virtualWrite(V2,(int)((char*)heartrate.value())[1]);//将bpm赋值给虚拟pin V2,可以用于数字显示 bridge1.virtualWrite(V5, (int)((char*)heartrate.value())[1]); //把这个bpm传送给虚拟pin v5,用于esp8266的显示,这一句是本幕的精华。bridge1.将把V5推送给eps8266 delay(100); digitalWrite(13, LOW); // D13闪动一下 // Serial.print((int)((char*)heartrate.value())[1]);//串口窗显示 // Serial.println(" bpm"); } }}
第二幕:配置blynk App(重点是bridge--桥组件)
拖入bridge组件,注意,没有需要配置的地方,活都在arduino 101和esp8266侧干了。
别的,别的没啥了,和前一集一样,一个数字显示控件绑定V1,一个graph控件绑定V2.
第三幕:配置d1mini侧代码
啃萝卜 - Make it easy!
/*************************************************************代码借鉴From http://www.geekstips.com/blynk-b ... etween-two-esp8266/ 2017-04-23 将101----heart rate ,通过bridge,发送至8266,并且通过oled显示出来 it works *************************************************************/#define BLYNK_PRINT Serial#include <ESP8266WiFi.h>#include <BlynkSimpleEsp8266.h>#include <Wire.h> // Include Wire if you're using I2C#include <SFE_MicroOLED.h> // Include the SFE_MicroOLED library#define PIN_RESET 255 //#define DC_JUMPER 0 // I2C Addres: 0 - 0x3C, 1 - 0x3D//////////////////////////////////// MicroOLED Object Declaration ////////////////////////////////////MicroOLED oled(PIN_RESET, DC_JUMPER); // I2C Example// You should get Auth Token in the Blynk App.// Go to the Project Settings (nut icon).char auth[] = "4d******************f26 ";//8266的令牌// Your WiFi credentials.// Set password to "" for open networks.char ssid[] = "your ssid";char pass[] = "your psw";// This code will update the virtual port 5BLYNK_WRITE(V5) {//还记得V5吗?就是在101端配置的那个虚拟pin,在这里对应上了,并不需要在app中配置什么 int pinData = param.asInt(); oled.clear(PAGE);//clear the screen before we draw our image oled.setCursor(15, 25);//光标定位 oled.print(pinData);//打印心率值 oled.display();//}void setup(){ Serial.begin(9600); Blynk.begin(auth, ssid, pass,"192.168.0.146"); oled.begin(); oled.clear(ALL); oled.display(); delay(1000);}void loop(){ Blynk.run();}
第四幕:将arduino 101通过usb连接至blynk server
这个和上一集一样。我再唠叨一下。
(1)打开C:\**************\Documents\Arduino\libraries\Blynk\scripts
(2)在cmd窗口下,运行blynk-ser.bat -c COM** ,注意,把批处理里面的云服务器地址改成你的本地服务器地址。
(3)你看到这段,就说明连上了:
第五幕:观察效果
片尾:
我关闭了blynk APP,而101和esp8266仍然在正常工作。101负责采集数据,每十秒上送一次至server ,而同时esp8266从server上收到通过bridge推送过来的数据,在oled上更新显示。一幅男耕女织的田园画面。。。
对了,好像忘记了点什么?硬件连接?实在没什么说的,是叠装,将oled扩展板叠装在d1mini上面,就齐活了。
D1 MINI这套板子性价比极高,我入手了一套,如有兴趣可以交流沟通。
【小结】
第三集演完,我们对101---blynkserver的剧情已经看熟啦。下一集是平行剧情,我会把男一号从esp8266换成esp32,这是一个dfrobot出品的优秀模块。
第四集还在编剧中,我想这一集出场的演员中,会有一个靓丽的穿戴新秀。咱们一起拭目以待。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
制作自动驾驶和避让的迷你遥控车,基于ESP32的Arduino开发模块
arduino中nodemcu板的配置
干货丨WIFI版Badusb自制教程
前方高能,教大家制作一个能手机控制的继电器开关!
Arduino IDE 搭建 ESP8266 开发环境及项目演示
如何仅花20元成本用arduino平台建立自己的物联网应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服