• Home
  • Archive
  • Tools
  • Contact Us

The Customize Windows

Technology Journal

  • Cloud Computing
  • Computer
  • Digital Photography
  • Windows 7
  • Archive
  • Cloud Computing
  • Virtualization
  • Computer and Internet
  • Digital Photography
  • Android
  • Sysadmin
  • Electronics
  • Big Data
  • Virtualization
  • Downloads
  • Web Development
  • Apple
  • Android
Advertisement
You are here:Home » Detect Samsung Smartwatch BLE and Trigger IBM Watson IoT Event

By Abhishek Ghosh March 17, 2020 6:14 pm Updated on March 17, 2020

Detect Samsung Smartwatch BLE and Trigger IBM Watson IoT Event

Advertisement

We can trigger ESP32 to send message to IBM Watson IoT in Presence of a Particular Samsung Galaxy Smartwatch. This involves BLE and WiFi. In our one series of articles on Samsung Smartwatch as Proximity Switch, we triggered a local event, such as control of a relay. In our other series of articles, we sent message to IBM Watson IoT with upon pressing a button (this guide and this guide).

Now, we can combine the two projects so that ESP32 will connect with IBM Watson IoT when a particular Samsung Smartwatch will come closer to it. That is great for some automation which we can not handle locally, like sending a text message or an Email. This is the working code :

Vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include "BLEDevice.h"
#include <WiFi.h>
#include <WiFiMulti.h>
#include <HTTPClient.h>
#include <base64.h>
#define USE_SERIAL Serial
 
const char* ssid = "your-hotspot";
const char* password = "password-of-hotspot";
 
#define ORG "paste-it-here"
#define DEVICE_TYPE "DevBoard" //change
#define DEVICE_ID "ESP32" // change
#define TOKEN "your-token"
#define EVENT "myEvent" // example
 
// <------- CHANGE PARAMETERS ABOVE THIS LINE ------------>
 
String urlPath = "/api/v0002/device/types/" DEVICE_TYPE "/devices/" DEVICE_ID "/events/" EVENT;
String urlHost = ORG ".messaging.internetofthings.ibmcloud.com";
int urlPort = 8883;
String authHeader;
 
static BLEAddress *pServerAddress;
BLEScan* pBLEScan;
BLEClient*  pClient;
bool deviceFound = false;
bool LEDoff = false;
bool BotonOff = false;
String knownAddresses[] = { "e0:a1:07:b7:0b:95"}; // change the MAC
unsigned long entry;
 
static void notifyCallback(
  BLERemoteCharacteristic* pBLERemoteCharacteristic,
  uint8_t* pData,
  size_t length,
  bool isNotify) {
  Serial.print("Notify callback for characteristic ");
  Serial.print(pBLERemoteCharacteristic->getUUID().toString().c_str());
  Serial.print(" of data length ");
  Serial.println(length);
}
 
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice Device){
      // show the MAC of other BLE devices
      //Serial.print("BLE Advertised Device found: ");
      //Serial.println(Device.toString().c_str());
      pServerAddress = new BLEAddress(Device.getAddress());
      bool known = false;
      bool Master = false;
      for (int i = 0; i < (sizeof(knownAddresses) / sizeof(knownAddresses[0])); i++) {
        if (strcmp(pServerAddress->toString().c_str(), knownAddresses[i].c_str()) == 0)
          known = true;
      }
      if (known) {
        Serial.print("Our device found!");
        Serial.print("Device distance:");
        Serial.println(Device.getRSSI());
        // adjust the value. -85 is medium distance
        // -60 is closer than -85
        if (Device.getRSSI() > -85) {
          deviceFound = true;
        }
        else {
          deviceFound = false;
        }
        Device.getScan()->stop();
        delay(100);
      }
    }
};
void setup() {
  Serial.begin(115200);
  BLEDevice::init("");
  pClient  = BLEDevice::createClient();
  pBLEScan = BLEDevice::getScan();
  pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  pBLEScan->setActiveScan(true);
   initWifi();
   authHeader = "Authorization: Basic " + base64::encode("use-token-auth:" TOKEN) + "\r\n";
  Serial.println("Done");
}
void Bluetooth() {
  Serial.println();
  Serial.println("BLE Scan restarted.....");
  deviceFound = false;
  BLEScanResults scanResults = pBLEScan->start(5);
  if (deviceFound) {
    Serial.println("Found");
    doWiFiClientSecure();
    delay(10000);
  }
  else{
    Serial.println("Device is not closer");
  }
}
void loop() {
  Bluetooth();
}
 
void doWiFiClientSecure() {
WiFiClientSecure client;
Serial.print("connect: "); Serial.println(urlHost);
while ( ! client.connect(urlHost.c_str(), urlPort)) {
    Serial.print(".");
}
Serial.println("Connected");
String postData = String("{  \"d\": {\"aMessage\": \"") + millis()/1000 + "\"}  }";
String msg = "POST " + urlPath + " HTTP/1.1\r\n"
                "Host: " + urlHost + "\r\n"
                "" + authHeader + ""
                "Content-Type: application/json\r\n"
                "Content-Length: " + postData.length() + "\r\n"
                "\r\n" + postData;
                
client.print(msg);
Serial.print(msg);
 
Serial.print("\n*** Request sent, receiving response...");
while (!!!client.available()) {
    delay(50);
Serial.print(".");
  }
  
Serial.println();
Serial.println("Got response");  
  while(client.available()){
  Serial.write(client.read());
  }
Serial.println(); Serial.println("closing connection");
  client.stop();
}
 
void initWifi() {
  Serial.print("Connecting to: "); Serial.print(WiFi.SSID());
  WiFi.mode(WIFI_STA);  
  WiFi.begin(ssid, password);  
  while (WiFi.status() != WL_CONNECTED) {
     delay(250);
     Serial.print(".");
  }
  
  Serial.println("");
  Serial.print("WiFi connected, IP address: "); Serial.println(WiFi.localIP());
 
}

NOTE : You need to follow this guide to enable Arduino IDE to upload this large code on ESP32. Else you’ll face “Sketch Too Big” error! This code will consume 85% space. So, we have some more space to upgrade the code in future.

Advertisement

---

The above code, in presence of the particular smartwatch will give this output on serial monitor :

Detect Samsung Smartwatch BLE and Trigger IBM Watson IoT Event

Vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Connected
POST /api/v0002/device/types/DevBoard/devices/ESP32/events/myEvent HTTP/1.1
Host: tko2rj.messaging.internetofthings.ibmcloud.com
Authorization: Basic dXNlLXRva2VuLWF1dGg6YihONHFQM0BMeCF5ZGFvaUVN
Content-Type: application/json
Content-Length: 28
 
{  "d": {"aMessage": "5"}  }
*** Request sent, receiving response...................
Got response
HTTP/1.1 200 OK
Server: IBM WIoTP Message Gateway
Date: Tue, 17 Mar 2020 17:35:52 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Connection: keep-alive
Keep-Alive: timeout=60
Cache-Control: no-cache
Content-Type: text/plain;charset=utf-8
Content-Length: 0
 
 
closing connection

And this debug information on your IBM Watson IoT’s log :

Samsung Smartwatch BLE Trigger IBM Watson IoT Event

If the device is absent, then you’ll get :

Vim
1
2
3
4
5
6
7
8
BLE Scan restarted.....
The device is not closer
 
BLE Scan restarted.....
The device is not closer
 
BLE Scan restarted.....
The device is not closer

We had a GitHub repository with all sample codes for IBM Watson IoT we have created. We have added the above code to the repository as smartwatch-BLE-switch.ino.

This code can be advanced with distance measurement data and applied in real-life with car, garage door and so on to automatically notify the family members.

Facebook Twitter Pinterest

Abhishek Ghosh

About Abhishek Ghosh

Abhishek Ghosh is a Businessman, Surgeon, Author and Blogger. You can keep touch with him on Twitter - @AbhishekCTRL.

Here’s what we’ve got for you which might like :

Articles Related to Detect Samsung Smartwatch BLE and Trigger IBM Watson IoT Event

  • Detect Smartwatch With ESP32 on IBM Watson IoT Widget

    In our previous guide, we have shown that we can trigger ESP32 (with Arduino IDE) to send message to IBM Watson IoT in Presence of a Particular Samsung Galaxy Smartwatch. That process involves BLE and WiFi. In our one series of articles on Samsung Smartwatch as Proximity Switch, we triggered a local event, such as […]

  • WROOM ESP32 Example Codes For IBM Watson IoT Platform

    Here Are Few WROOM ESP32 Example Codes For IBM Watson IoT Platform So That Anyone Can Get Started With Both of Them Without Huge Experience.

  • How to Control Multiple Relays With Single Arduino ESP32?

    Before How to Control Multiple Relays With Single Arduino ESP32 Testing, You Need to Learn How to Create Multiple MQTT Channels & Fetch Data.

  • Connecting ESP32 Arduino with DHT11 with IBM Watson IoT

    Earlier, we described how to create graph on IBM Watson IoT dashboard by using the default widgets. In previous guide, we described how to use ESP32 Arduino with DHT11 sensor. Here is the Code and Diagram to Connect ESP32 Arduino with DHT11 with IBM Watson IoT and Get Odometer Like Gauges on Dashboard. For this […]

performing a search on this website can help you. Also, we have YouTube Videos.

Take The Conversation Further ...

We'd love to know your thoughts on this article.
Meet the Author over on Twitter to join the conversation right now!

If you want to Advertise on our Article or want a Sponsored Article, you are invited to Contact us.

Contact Us

Subscribe To Our Free Newsletter

Get new posts by email:

Please Confirm the Subscription When Approval Email Will Arrive in Your Email Inbox as Second Step.

Search this website…

 

Popular Articles

Our Homepage is best place to find popular articles!

Here Are Some Good to Read Articles :

  • Cloud Computing Service Models
  • What is Cloud Computing?
  • Cloud Computing and Social Networks in Mobile Space
  • ARM Processor Architecture
  • What Camera Mode to Choose
  • Indispensable MySQL queries for custom fields in WordPress
  • Windows 7 Speech Recognition Scripting Related Tutorials

Social Networks

  • Pinterest (24.3K Followers)
  • Twitter (5.8k Followers)
  • Facebook (5.7k Followers)
  • LinkedIn (3.7k Followers)
  • YouTube (1.3k Followers)
  • GitHub (Repository)
  • GitHub (Gists)
Looking to publish sponsored article on our website?

Contact us

Recent Posts

  • What is the Push and Pull Model (Marketing/Sales)?December 7, 2023
  • Legal and Moral Aspects of Data MiningDecember 6, 2023
  • How Decision Support System WorksDecember 6, 2023
  • Types of Classification MethodsDecember 5, 2023
  • Time Series Analysis: OverviewDecember 5, 2023
PC users can consult Corrine Chorney for Security.

Want to know more about us?

Read Notability and Mentions & Our Setup.

Copyright © 2023 - The Customize Windows | dESIGNed by The Customize Windows

Copyright  · Privacy Policy  · Advertising Policy  · Terms of Service  · Refund Policy