MtM+ / Mbed OS Mt05_MtSense05

Dependencies:   CM3592

Fork of MtConnect04S_MtSense05 by MtM+

Files at this revision

API Documentation at this revision

Comitter:
johnathanlyu
Date:
Tue Jun 06 02:02:38 2017 +0000
Child:
1:6881d24f8efe
Commit message:
MtConnect04S with MtSense05 initial

Changed in this revision

.mbed Show annotated file Show diff for this revision Revisions of this file
.mbedignore Show annotated file Show diff for this revision Revisions of this file
CM3592.lib Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
module.json Show annotated file Show diff for this revision Revisions of this file
readme.md Show annotated file Show diff for this revision Revisions of this file
source/EnvironmentalUVService.h Show annotated file Show diff for this revision Revisions of this file
source/main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.mbed	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,1 @@
+ROOT=.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.mbedignore	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,4 @@
+mbed-os/features/net/*
+mbed-os/uvisor-mbed-lib/*
+mbed-os/frameworks/*
+mbed-os/features/mbedtls/*
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CM3592.lib	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/teams/MtM/code/CM3592/#a434d2ca0357
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#5fff7e1daeb395aa3d1ecf3f9ec3f4fead3de0c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,13 @@
+{
+    "target_overrides": {
+        "K64F": {
+            "target.features_add": ["BLE"],
+            "target.extra_labels_add": ["ST_BLUENRG"],
+            "target.macros_add": ["IDB0XA1_D13_PATCH"]
+        },
+        "NUCLEO_F401RE": {
+            "target.features_add": ["BLE"],
+            "target.extra_labels_add": ["ST_BLUENRG"]
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/module.json	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,16 @@
+{
+  "name": "MtConnect04S with MtSense05",
+  "version": "0.0.1",
+  "description": "An example of UV sensor with 904S",
+  "licenses": [
+    {
+      "url": "https://spdx.org/licenses/Apache-2.0",
+      "type": "Apache-2.0"
+    }
+  ],
+  "dependencies": {
+    "ble": "^2.0.0"
+  },
+  "targetDependencies": {},
+  "bin": "./source"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/readme.md	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,5 @@
+This example is for MtConnect04S with MtSense05 demo
+
+1. compile done and load hex into MtConnect04s
+2. reset MtConnect04S
+3. You can find the environmentalService 0x181A below characteristic UV Index 0x2A76 it's show you current UV index.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/EnvironmentalUVService.h	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,40 @@
+#ifndef ENVIRONMENTALUVSERVICE_H
+#define ENVIRONMENTALUVSERVICE_H
+
+#include "ble/BLE.h"
+
+class EnvironmentUVService {
+     public:
+     
+        typedef int UVType_t;
+        EnvironmentUVService(BLE& _ble) : 
+            ble(_ble),
+            uvCharacteristic(0x2A76, &uv ) {
+                
+                static bool serviceAdded = false; /* We should only ever need to add the information service once. */
+                if (serviceAdded) {
+                    return;
+                }
+        
+                GattCharacteristic *charTable[] = { &uvCharacteristic };
+        
+                GattService environmentalService(GattService::UUID_ENVIRONMENTAL_SERVICE, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
+        
+                ble.gattServer().addService(environmentalService);
+                serviceAdded = true;     
+            }
+            
+        void updateTemperature(int uvIndex) {
+            uv = (UVType_t) uvIndex;
+            ble.gattServer().write(uvCharacteristic.getValueHandle(), (uint8_t *) &uv, sizeof(UVType_t));
+        }
+        
+    private:
+    
+        BLE& ble;
+        UVType_t uv;
+        ReadOnlyGattCharacteristic<UVType_t> uvCharacteristic;
+};
+
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/main.cpp	Tue Jun 06 02:02:38 2017 +0000
@@ -0,0 +1,134 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2006-2014 ARM Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <events/mbed_events.h>
+#include <mbed.h>
+#include "ble/BLE.h"
+#include "ble/Gap.h"
+#include "EnvironmentalUVService.h"
+#include "CM3592.h"
+
+Serial pc(p5, p4);
+I2C i2c(p3, p2);
+DigitalOut led1(p16, 1);
+CM3592 cm3592(i2c);
+
+const static char     DEVICE_NAME[] = "MtSense05 Test";
+static const uint16_t uuid16_list[] = {GattService::UUID_BATTERY_SERVICE};
+
+static EnvironmentUVService *environmentUVServicePtr;
+
+static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
+
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
+{
+    BLE::Instance().gap().startAdvertising();
+}
+
+void CM3592Init() {
+    
+    cm3592.init();
+
+}
+
+void CM3592Read() {
+    
+    uint16_t uvReal, uvIndex;
+    
+    cm3592.readData(&uvReal);
+    uvIndex = cm3592.getUVIndex(uvReal);
+    
+    BLE &ble = BLE::Instance();
+    if (ble.gap().getState().connected) {
+        environmentUVServicePtr->updateTemperature(uvIndex);
+    }
+    
+//    pc.printf("uv index is : %d\r\n", uvIndex);
+//    pc.printf("uv:%10d\r\n", uvReal);
+}
+
+void blinkCallback(void)
+{
+    led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
+    
+}
+
+/**
+ * This function is called when the ble initialization process has failled
+ */
+void onBleInitError(BLE &ble, ble_error_t error)
+{
+    /* Initialization error handling should go here */
+}
+
+/**
+ * Callback triggered when the ble initialization process has finished
+ */
+void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
+{
+    BLE&        ble   = params->ble;
+    ble_error_t error = params->error;
+
+    if (error != BLE_ERROR_NONE) {
+        /* In case of error, forward the error handling to onBleInitError */
+        onBleInitError(ble, error);
+        return;
+    }
+
+    /* Ensure that it is the default instance of BLE */
+    if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
+        return;
+    }
+
+    ble.gap().onDisconnection(disconnectionCallback);
+
+    /* Setup primary service */
+    environmentUVServicePtr = new EnvironmentUVService(ble);
+
+    /* Setup advertising */
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list));
+    ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME));
+    ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.gap().setAdvertisingInterval(100); /* 100ms */
+    ble.gap().startAdvertising();
+}
+
+void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
+    BLE &ble = BLE::Instance();
+    eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
+}
+
+int main()
+{
+    pc.set_flow_control(SerialBase::Disabled);
+    pc.baud(115200);
+    pc.printf("\r\n");
+    pc.printf("Welcome MTM Node !\r\n");
+    
+    eventQueue.call_every(500, blinkCallback);
+
+    CM3592Init();
+    eventQueue.call_every(1000, CM3592Read);
+
+    BLE &ble = BLE::Instance();
+    ble.onEventsToProcess(scheduleBleEventsProcessing);
+    ble.init(bleInitComplete);
+
+    eventQueue.dispatch_forever();
+
+    return 0;
+}