Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Driver_BLE_Mheuve BLE_API
main.cpp
00001 #include "mbed.h" 00002 #include "ble/BLE.h" 00003 #include "ble/services/UARTService.h" 00004 #include "Serial.h" 00005 #include "stdlib.h" 00006 00007 #define UART_BUFFER (UARTService::BLE_UART_SERVICE_MAX_DATA_LEN) 00008 00009 00010 const static char DEVICE_NAME[] = "Mheuve"; 00011 UARTService *uartServicePtr; 00012 00013 //PWM output 00014 00015 DigitalOut Green(PC_4); //Red LED 00016 DigitalOut Red(PC_5); //Green LED 00017 00018 Ticker tempo; 00019 00020 // Tableau et index de communication avec UART 00021 static char uartBuff[UART_BUFFER]; 00022 00023 // Routine de traitement des erreurs 00024 void onBleError(ble_error_t error); 00025 00026 /****************************************************/ 00027 /* Ticker actif lorsque la connexion BLE est présente */ 00028 /****************************************************/ 00029 void ConnectedBLE(void) 00030 { 00031 // Signal de vie: allumer et éteindre la LED 00032 Red = 0; 00033 Green = 1 ; 00034 00035 } 00036 00037 void message(void) 00038 { 00039 //Integre les trois chaines de caractere contenant les accelerations dans la chaine uartBuff 00040 sprintf(uartBuff, "coucou") ; 00041 //Envoie la chaine uartBuff sur le sevice TX UART BLE 00042 uartServicePtr->write(uartBuff, UARTService::BLE_UART_SERVICE_MAX_DATA_LEN); 00043 // Réinitialiser la chaîne uartBuff en entrant 0 dans les premiers caractères UART_BUFFER 00044 memset(uartBuff, 0, UART_BUFFER); 00045 00046 } 00047 00048 /*************************/ 00049 /* Connexion BLE réussie */ 00050 /*************************/ 00051 void BleConnectionCallback(const Gap::ConnectionCallbackParams_t *params) 00052 { 00053 // Signal de connexion BLE: allume / éteint la LED avec une période de 1 seconde 00054 ConnectedBLE(); 00055 tempo.attach(message, 1); 00056 } 00057 00058 /*****************************/ 00059 /* Déconnexion du client BLE */ 00060 /*****************************/ 00061 void BleDisconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) 00062 { 00063 (void)params; 00064 // Redémarrer la publicité 00065 tempo.detach(); 00066 BLE::Instance().gap().startAdvertising(); 00067 00068 Green = 0; 00069 Red = 1; 00070 00071 } 00072 00073 /***************************/ 00074 /* Rx de BLE et Rx vers USB*/ 00075 /***************************/ 00076 void BleOnDataWrittenCallback(const GattWriteCallbackParams *params) 00077 { 00078 char reception[UART_BUFFER]; 00079 char commande[2]; 00080 float valeur; 00081 00082 // Reçoit une chaîne de BLE 00083 if (params->handle == uartServicePtr->getTXCharacteristicHandle()) { 00084 // Copie de la chaine reçue dans reception 00085 sprintf(reception,"%s", params->data); 00086 // Copie dans la chaine commande des deux premier caracteres de la chaine reception 00087 sprintf(commande,"%c%c", reception[0], reception[1]); 00088 // Transformation des 3 caracteres suivants en valeur numerique 00089 valeur = ((reception[2] - '0')* 100 + (reception[3] - '0')* 10 +(reception[4] - '0')) ; 00090 valeur = valeur/255; 00091 00092 if( strcmp(commande, "LR")==0) { 00093 00094 } 00095 if( strcmp(commande, "LV")==0) { 00096 00097 } 00098 00099 } 00100 } 00101 00102 /***************************/ 00103 /* Erreur sur le canal BLE */ 00104 /***************************/ 00105 00106 void onBleError(ble_error_t error) 00107 { 00108 Red = 1; 00109 00110 /* Entrer le traitement des erreurs */ 00111 } 00112 00113 /**************************************/ 00114 /* Initialisation du service BLE UART */ 00115 /**************************************/ 00116 00117 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) 00118 { 00119 BLE& ble = params->ble; 00120 ble_error_t error = params->error; 00121 00122 if (error != BLE_ERROR_NONE) { 00123 00124 /* En cas d'erreur, transmettez le traitement d'erreur à onBleInitError*/ 00125 onBleError(error); 00126 return; 00127 } 00128 00129 /* Assurez-vous qu'il s'agit de l'instance par défaut de BLE */ 00130 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { 00131 return; 00132 } 00133 00134 ble.gap().onConnection(BleConnectionCallback); 00135 ble.gap().onDisconnection(BleDisconnectionCallback); 00136 ble.gattServer().onDataWritten(BleOnDataWrittenCallback); 00137 00138 /* Configuration du service primaire. */ 00139 UARTService uartService(ble); 00140 uartServicePtr = &uartService; 00141 00142 /* Configurer la publicité */ 00143 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); 00144 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); 00145 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); 00146 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 00147 ble.gap().setAdvertisingInterval(500); /* 500ms. */ 00148 ble.gap().startAdvertising(); 00149 00150 // Attend les événements sur BLE 00151 while (true) { 00152 ble.waitForEvent(); 00153 } 00154 } 00155 00156 /********/ 00157 /* MAIN */ 00158 /********/ 00159 int main(void) 00160 { 00161 00162 // Initialiser LED 00163 Green = 0; 00164 Red = 1; 00165 00166 00167 00168 /****** START Initialiser BLE **********/ 00169 BLE &ble = BLE::Instance(); 00170 ble.init(bleInitComplete); 00171 /******* FIN initialise BLE ***********/ 00172 00173 } 00174
Generated on Thu Aug 11 2022 05:02:37 by
1.7.2