Skip to content

Commit e3d1e19

Browse files
author
brentru
committed
add sens
1 parent 65d591c commit e3d1e19

File tree

1 file changed

+187
-0
lines changed

1 file changed

+187
-0
lines changed
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
/*********************************************************************
2+
Learn Guide: BLE Temperature Monitoring Armband
3+
4+
Adafruit invests time and resources providing this open source code,
5+
please support Adafruit and open-source hardware by purchasing
6+
products from Adafruit!
7+
8+
MIT license, check LICENSE for more information
9+
All text above, and the splash screen below must be included in
10+
any redistribution
11+
*********************************************************************/
12+
#include <bluefruit.h>
13+
#include <Adafruit_LittleFS.h>
14+
#include <InternalFileSystem.h>
15+
#include <Wire.h>
16+
#include "Adafruit_MCP9808.h"
17+
18+
// Read temperature in degrees Fahrenheit
19+
#define TEMPERATURE_F
20+
// uncomment the following line if you want to read temperature in degrees Celsius
21+
// #define TEMPERATURE_C
22+
23+
// Sensor read timeout, in minutes
24+
// NOTE: Measuring your armpit temperature for a minimum
25+
// of 12 minutes is equivalent to measuring your core body temperature.
26+
const long interval = 60000;
27+
28+
// last time the temperature was read
29+
unsigned long prv_ms = 0;
30+
31+
// BLE Service
32+
BLEDfu bledfu; // OTA DFU service
33+
BLEDis bledis; // device information
34+
BLEUart bleuart; // uart over ble
35+
BLEBas blebas; // battery
36+
37+
// Create the MCP9808 temperature sensor object
38+
Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
39+
40+
41+
void setup() {
42+
Serial.begin(115200);
43+
Serial.println("Wearable BlueFruit Temperature Sensor");
44+
Serial.println("-------------------------------------\n");
45+
46+
47+
if (!tempsensor.begin(0x18)) {
48+
Serial.println("Couldn't find MCP9808! Check your connections and verify the address is correct.");
49+
while (1);
50+
}
51+
Serial.println("Found MCP9808!");
52+
53+
// Sets the resolution of reading
54+
tempsensor.setResolution(3);
55+
56+
// Configure BLE
57+
// Setup the BLE LED to be enabled on CONNECT
58+
// Note: This is actually the default behaviour, but provided
59+
// here in case you want to control this LED manually via PIN 19
60+
Bluefruit.autoConnLed(true);
61+
62+
// Config the peripheral connection with maximum bandwidth
63+
Bluefruit.configPrphBandwidth(BANDWIDTH_MAX);
64+
65+
Bluefruit.begin();
66+
Bluefruit.setTxPower(4); // Check bluefruit.h for supported values
67+
Bluefruit.setName("Bluefruit52");
68+
Bluefruit.Periph.setConnectCallback(connect_callback);
69+
Bluefruit.Periph.setDisconnectCallback(disconnect_callback);
70+
71+
// To be consistent OTA DFU should be added first if it exists
72+
bledfu.begin();
73+
74+
// Configure and Start Device Information Service
75+
bledis.setManufacturer("Adafruit Industries");
76+
bledis.setModel("Bluefruit Feather52");
77+
bledis.begin();
78+
79+
// Configure and Start BLE Uart Service
80+
bleuart.begin();
81+
82+
// Start BLE Battery Service
83+
blebas.begin();
84+
blebas.write(100);
85+
86+
// Set up and start advertising
87+
startAdv();
88+
89+
Serial.println("Please use Adafruit's Bluefruit LE app to connect in UART mode");
90+
Serial.println("Once connected, enter character(s) that you wish to send");
91+
92+
}
93+
94+
void loop() {
95+
96+
unsigned long current_ms = millis();
97+
98+
if (current_ms - prv_ms >= (1000*5)) {
99+
prv_ms = current_ms;
100+
101+
// wakes up MCP9808 - power consumption ~200 mikro Ampere
102+
Serial.println("Wake up MCP9808");
103+
tempsensor.wake();
104+
105+
// read and print the temperature
106+
Serial.print("Temp: ");
107+
#ifdef TEMPERATURE_F
108+
float temp = tempsensor.readTempF();
109+
Serial.print(temp);
110+
Serial.println("*F.");
111+
#endif
112+
113+
#ifdef TEMPERATURE_C
114+
float temp = tempsensor.readTempC();
115+
Serial.print(temp);
116+
Serial.println("*C.");
117+
#endif
118+
119+
char buffer [8];
120+
//itoa(temp, buffer, 10);
121+
snprintf(buffer, sizeof(buffer) - 1, "%0.*f", 2, temp);
122+
bleuart.write(buffer);
123+
bleuart.write("\n");
124+
125+
// shutdown MSP9808 - power consumption ~0.1 mikro Ampere
126+
// stops temperature sampling
127+
Serial.println("Shutting down MCP9808");
128+
tempsensor.shutdown_wake(1);
129+
}
130+
131+
}
132+
133+
134+
void startAdv(void)
135+
{
136+
// Advertising packet
137+
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
138+
Bluefruit.Advertising.addTxPower();
139+
140+
// Include bleuart 128-bit uuid
141+
Bluefruit.Advertising.addService(bleuart);
142+
143+
// Secondary Scan Response packet (optional)
144+
// Since there is no room for 'Name' in Advertising packet
145+
Bluefruit.ScanResponse.addName();
146+
147+
/* Start Advertising
148+
* - Enable auto advertising if disconnected
149+
* - Interval: fast mode = 20 ms, slow mode = 152.5 ms
150+
* - Timeout for fast mode is 30 seconds
151+
* - Start(timeout) with timeout = 0 will advertise forever (until connected)
152+
*
153+
* For recommended advertising interval
154+
* https://developer.apple.com/library/content/qa/qa1931/_index.html
155+
*/
156+
Bluefruit.Advertising.restartOnDisconnect(true);
157+
Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms
158+
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
159+
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
160+
}
161+
162+
// callback invoked when central connects
163+
void connect_callback(uint16_t conn_handle)
164+
{
165+
// Get the reference to current connection
166+
BLEConnection* connection = Bluefruit.Connection(conn_handle);
167+
168+
char central_name[32] = { 0 };
169+
connection->getPeerName(central_name, sizeof(central_name));
170+
171+
Serial.print("Connected to ");
172+
Serial.println(central_name);
173+
}
174+
175+
/**
176+
* Callback invoked when a connection is dropped
177+
* @param conn_handle connection where this event happens
178+
* @param reason is a BLE_HCI_STATUS_CODE which can be found in ble_hci.h
179+
*/
180+
void disconnect_callback(uint16_t conn_handle, uint8_t reason)
181+
{
182+
(void) conn_handle;
183+
(void) reason;
184+
185+
Serial.println();
186+
Serial.print("Disconnected, reason = 0x"); Serial.println(reason, HEX);
187+
}

0 commit comments

Comments
 (0)