prova

Dependencies:   mbed X_NUCLEO_IDB0XA1 BLE_API

Committer:
pinofal
Date:
Fri Apr 22 09:45:05 2022 +0000
Revision:
9:b5608d3ee0b1
Prova

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pinofal 9:b5608d3ee0b1 1 //Tested: NUCLEO-F401RE
pinofal 9:b5608d3ee0b1 2 #include "mbed.h"
pinofal 9:b5608d3ee0b1 3
pinofal 9:b5608d3ee0b1 4 /****************** START BLE Declaration ****************/
pinofal 9:b5608d3ee0b1 5 #include "ble/BLE.h"
pinofal 9:b5608d3ee0b1 6 #include "LEDService.h"
pinofal 9:b5608d3ee0b1 7
pinofal 9:b5608d3ee0b1 8 DigitalOut Led1(LED1);
pinofal 9:b5608d3ee0b1 9 DigitalOut myLED(PB_2);
pinofal 9:b5608d3ee0b1 10 DigitalOut myRelay(PA_15);
pinofal 9:b5608d3ee0b1 11 DigitalIn myButton(USER_BUTTON);
pinofal 9:b5608d3ee0b1 12 Serial pc(USBTX, USBRX);
pinofal 9:b5608d3ee0b1 13
pinofal 9:b5608d3ee0b1 14 DigitalOut OutRed(PA_4);
pinofal 9:b5608d3ee0b1 15 DigitalOut OutBlue(PA_1);
pinofal 9:b5608d3ee0b1 16 DigitalOut OutGreen(PB_0);
pinofal 9:b5608d3ee0b1 17
pinofal 9:b5608d3ee0b1 18
pinofal 9:b5608d3ee0b1 19 const static char DEVICE_NAME[] = "UART";
pinofal 9:b5608d3ee0b1 20 static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID};
pinofal 9:b5608d3ee0b1 21
pinofal 9:b5608d3ee0b1 22 LEDService *ledServicePtr;
pinofal 9:b5608d3ee0b1 23 /***************** END BLE Declaration ********************/
pinofal 9:b5608d3ee0b1 24
pinofal 9:b5608d3ee0b1 25 /**************** START BLE Functions **********************/
pinofal 9:b5608d3ee0b1 26
pinofal 9:b5608d3ee0b1 27 //****************************************************************
pinofal 9:b5608d3ee0b1 28 //* Disconnection Callback
pinofal 9:b5608d3ee0b1 29 //****************************************************************
pinofal 9:b5608d3ee0b1 30 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
pinofal 9:b5608d3ee0b1 31 {
pinofal 9:b5608d3ee0b1 32 (void)params;
pinofal 9:b5608d3ee0b1 33 BLE::Instance().gap().startAdvertising(); // restart advertising
pinofal 9:b5608d3ee0b1 34
pinofal 9:b5608d3ee0b1 35 pc.printf("------ Sono qui 3 disconnetrionCallBack \r\n", error);
pinofal 9:b5608d3ee0b1 36 }
pinofal 9:b5608d3ee0b1 37
pinofal 9:b5608d3ee0b1 38 //****************************************************************************************
pinofal 9:b5608d3ee0b1 39 //* This callback allows the LEDService to receive updates to the ledState Characteristic.
pinofal 9:b5608d3ee0b1 40 //*
pinofal 9:b5608d3ee0b1 41 //* @param[in] params
pinofal 9:b5608d3ee0b1 42 //* Information about the characterisitc being updated.
pinofal 9:b5608d3ee0b1 43 //****************************************************************************************
pinofal 9:b5608d3ee0b1 44 void onDataWrittenCallback(const GattWriteCallbackParams *params)
pinofal 9:b5608d3ee0b1 45 {
pinofal 9:b5608d3ee0b1 46 if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1))
pinofal 9:b5608d3ee0b1 47 {
pinofal 9:b5608d3ee0b1 48 switch(*(params->data))
pinofal 9:b5608d3ee0b1 49 {
pinofal 9:b5608d3ee0b1 50 case 0:
pinofal 9:b5608d3ee0b1 51 {
pinofal 9:b5608d3ee0b1 52 Led1 = 0x00; // spegni LED su scheda
pinofal 9:b5608d3ee0b1 53 //++++++++++++++ INIZIO pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 54 OutRed = 0;
pinofal 9:b5608d3ee0b1 55 OutGreen = 0;
pinofal 9:b5608d3ee0b1 56 OutBlue = 0;
pinofal 9:b5608d3ee0b1 57 //++++++++++++++ FINE pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 58
pinofal 9:b5608d3ee0b1 59 } break;
pinofal 9:b5608d3ee0b1 60 case 1:
pinofal 9:b5608d3ee0b1 61 {
pinofal 9:b5608d3ee0b1 62 Led1 = 0x01; // accendi LED su scheda
pinofal 9:b5608d3ee0b1 63 //++++++++++++++ INIZIO pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 64 OutRed = 1;
pinofal 9:b5608d3ee0b1 65 OutGreen = 0;
pinofal 9:b5608d3ee0b1 66 OutBlue = 0;
pinofal 9:b5608d3ee0b1 67 //++++++++++++++ FINE pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 68 } break;
pinofal 9:b5608d3ee0b1 69 case 2:
pinofal 9:b5608d3ee0b1 70 {
pinofal 9:b5608d3ee0b1 71 Led1 = 0x00; // spegni LED su scheda
pinofal 9:b5608d3ee0b1 72 //++++++++++++++ INIZIO pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 73 OutRed = 0;
pinofal 9:b5608d3ee0b1 74 OutGreen = 1;
pinofal 9:b5608d3ee0b1 75 OutBlue = 0;
pinofal 9:b5608d3ee0b1 76 //++++++++++++++ FINE pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 77
pinofal 9:b5608d3ee0b1 78 } break;
pinofal 9:b5608d3ee0b1 79 case 3:
pinofal 9:b5608d3ee0b1 80 {
pinofal 9:b5608d3ee0b1 81 Led1 = 0x01; // accendi LED su scheda
pinofal 9:b5608d3ee0b1 82 //++++++++++++++ INIZIO pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 83 OutRed = 0;
pinofal 9:b5608d3ee0b1 84 OutGreen = 0;
pinofal 9:b5608d3ee0b1 85 OutBlue = 1;
pinofal 9:b5608d3ee0b1 86 //++++++++++++++ FINE pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 87
pinofal 9:b5608d3ee0b1 88 } break;
pinofal 9:b5608d3ee0b1 89 case 4:
pinofal 9:b5608d3ee0b1 90 {
pinofal 9:b5608d3ee0b1 91 Led1 = 0x01; // accendi LED su scheda
pinofal 9:b5608d3ee0b1 92 //++++++++++++++ INIZIO pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 93 OutRed = 1;
pinofal 9:b5608d3ee0b1 94 OutGreen = 1;
pinofal 9:b5608d3ee0b1 95 OutBlue = 1;
pinofal 9:b5608d3ee0b1 96 //++++++++++++++ FINE pilota accensione delle strip LED +++++++++++++++++++++++++
pinofal 9:b5608d3ee0b1 97
pinofal 9:b5608d3ee0b1 98 } break;
pinofal 9:b5608d3ee0b1 99 case 5:
pinofal 9:b5608d3ee0b1 100 {
pinofal 9:b5608d3ee0b1 101 Led1 = 0x00; // spegni LED su scheda
pinofal 9:b5608d3ee0b1 102 myRelay = 0x00; // spegni Relay
pinofal 9:b5608d3ee0b1 103 } break;
pinofal 9:b5608d3ee0b1 104
pinofal 9:b5608d3ee0b1 105 default: break;
pinofal 9:b5608d3ee0b1 106 }
pinofal 9:b5608d3ee0b1 107 pc.printf("\n\r---- Ricevuto: %d \n\r",*(params->data));
pinofal 9:b5608d3ee0b1 108
pinofal 9:b5608d3ee0b1 109 //Led1 = *(params->data); // in params->data riceve il byte inviato dal cellulare
pinofal 9:b5608d3ee0b1 110 }
pinofal 9:b5608d3ee0b1 111 }
pinofal 9:b5608d3ee0b1 112
pinofal 9:b5608d3ee0b1 113 //**************************************************************************
pinofal 9:b5608d3ee0b1 114 //* This function is called when the ble initialization process has failled
pinofal 9:b5608d3ee0b1 115 //**************************************************************************
pinofal 9:b5608d3ee0b1 116 void onBleInitError(BLE &ble, ble_error_t error)
pinofal 9:b5608d3ee0b1 117 {
pinofal 9:b5608d3ee0b1 118 /* Initialization error handling should go here */
pinofal 9:b5608d3ee0b1 119 }
pinofal 9:b5608d3ee0b1 120
pinofal 9:b5608d3ee0b1 121 //**************************************************************************
pinofal 9:b5608d3ee0b1 122 //* Callback triggered when the ble initialization process has finished
pinofal 9:b5608d3ee0b1 123 //**************************************************************************
pinofal 9:b5608d3ee0b1 124 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
pinofal 9:b5608d3ee0b1 125 {
pinofal 9:b5608d3ee0b1 126 BLE& ble = params->ble;
pinofal 9:b5608d3ee0b1 127 ble_error_t error = params->error;
pinofal 9:b5608d3ee0b1 128
pinofal 9:b5608d3ee0b1 129 if (error != BLE_ERROR_NONE)
pinofal 9:b5608d3ee0b1 130 {
pinofal 9:b5608d3ee0b1 131 /* In case of error, forward the error handling to onBleInitError */
pinofal 9:b5608d3ee0b1 132 onBleInitError(ble, error);
pinofal 9:b5608d3ee0b1 133 return;
pinofal 9:b5608d3ee0b1 134 }
pinofal 9:b5608d3ee0b1 135
pinofal 9:b5608d3ee0b1 136 /* Ensure that it is the default instance of BLE */
pinofal 9:b5608d3ee0b1 137 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE)
pinofal 9:b5608d3ee0b1 138 {
pinofal 9:b5608d3ee0b1 139 return;
pinofal 9:b5608d3ee0b1 140 }
pinofal 9:b5608d3ee0b1 141
pinofal 9:b5608d3ee0b1 142 ble.gap().onDisconnection(disconnectionCallback);
pinofal 9:b5608d3ee0b1 143 ble.gattServer().onDataWritten(onDataWrittenCallback);
pinofal 9:b5608d3ee0b1 144
pinofal 9:b5608d3ee0b1 145 bool initialValueForLEDCharacteristic = true;
pinofal 9:b5608d3ee0b1 146 ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic);
pinofal 9:b5608d3ee0b1 147
pinofal 9:b5608d3ee0b1 148 /* setup advertising */
pinofal 9:b5608d3ee0b1 149 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
pinofal 9:b5608d3ee0b1 150 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
pinofal 9:b5608d3ee0b1 151 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
pinofal 9:b5608d3ee0b1 152 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pinofal 9:b5608d3ee0b1 153 ble.gap().setAdvertisingInterval(1000); // 1000ms.
pinofal 9:b5608d3ee0b1 154 ble.gap().startAdvertising();
pinofal 9:b5608d3ee0b1 155
pinofal 9:b5608d3ee0b1 156 while (true)
pinofal 9:b5608d3ee0b1 157 {
pinofal 9:b5608d3ee0b1 158 ble.waitForEvent();
pinofal 9:b5608d3ee0b1 159 //pc.printf("-------- Sono qui 1 WaitForEvent() \n\r");
pinofal 9:b5608d3ee0b1 160 }
pinofal 9:b5608d3ee0b1 161 }
pinofal 9:b5608d3ee0b1 162 /******************* END BLE Functions *************************/
pinofal 9:b5608d3ee0b1 163
pinofal 9:b5608d3ee0b1 164
pinofal 9:b5608d3ee0b1 165 /********/
pinofal 9:b5608d3ee0b1 166 /* MAIN */
pinofal 9:b5608d3ee0b1 167 /********/
pinofal 9:b5608d3ee0b1 168 int main(void)
pinofal 9:b5608d3ee0b1 169 {
pinofal 9:b5608d3ee0b1 170 // configura velocità della comunicazione seriale su USB-VirtualCom e invia messaggio di benvenuto
pinofal 9:b5608d3ee0b1 171 pc.baud(9600); //921600 bps
pinofal 9:b5608d3ee0b1 172 // messaggio di benvenuto
pinofal 9:b5608d3ee0b1 173 pc.printf("\r\n*************** Hallo *********************\r\n");
pinofal 9:b5608d3ee0b1 174 pc.printf("\r\n*** Bluetooth Driving for LED and Relay ***\r\n");
pinofal 9:b5608d3ee0b1 175
pinofal 9:b5608d3ee0b1 176 //imposta il funzionamento del pulsante come "PullDown": Aperto = '0'. L'altra modalità di funzinamento è PullUp
pinofal 9:b5608d3ee0b1 177 myButton.mode(PullDown);
pinofal 9:b5608d3ee0b1 178
pinofal 9:b5608d3ee0b1 179 // inizializza variabili
pinofal 9:b5608d3ee0b1 180 OutRed=0;
pinofal 9:b5608d3ee0b1 181 OutBlue=0;
pinofal 9:b5608d3ee0b1 182 OutGreen=0;
pinofal 9:b5608d3ee0b1 183
pinofal 9:b5608d3ee0b1 184 //+++++++++++++ INIZIO ciclo di prova ++++++
pinofal 9:b5608d3ee0b1 185 /*
pinofal 9:b5608d3ee0b1 186 while(true)
pinofal 9:b5608d3ee0b1 187 {
pinofal 9:b5608d3ee0b1 188 if(myButton==0x01)
pinofal 9:b5608d3ee0b1 189 {
pinofal 9:b5608d3ee0b1 190 myLED=0x01;
pinofal 9:b5608d3ee0b1 191 //while(myButton !=0x00);
pinofal 9:b5608d3ee0b1 192 Led1=0x01;
pinofal 9:b5608d3ee0b1 193 myRelay=0x01; // accendi relay
pinofal 9:b5608d3ee0b1 194 OutRed = 1;
pinofal 9:b5608d3ee0b1 195 OutGreen = 1;
pinofal 9:b5608d3ee0b1 196 OutBlue = 1;
pinofal 9:b5608d3ee0b1 197
pinofal 9:b5608d3ee0b1 198 }
pinofal 9:b5608d3ee0b1 199 else
pinofal 9:b5608d3ee0b1 200 {
pinofal 9:b5608d3ee0b1 201 myLED=0x00;
pinofal 9:b5608d3ee0b1 202 Led1=0x00;
pinofal 9:b5608d3ee0b1 203 myRelay=0x00; // spegni relay
pinofal 9:b5608d3ee0b1 204 OutRed = 0;
pinofal 9:b5608d3ee0b1 205 OutGreen = 0;
pinofal 9:b5608d3ee0b1 206 OutBlue = 0;
pinofal 9:b5608d3ee0b1 207 }
pinofal 9:b5608d3ee0b1 208 }
pinofal 9:b5608d3ee0b1 209 */
pinofal 9:b5608d3ee0b1 210 //++++++ FINE Ciclo di Prove
pinofal 9:b5608d3ee0b1 211 /*************** START BLE Main ************/
pinofal 9:b5608d3ee0b1 212 BLE &ble = BLE::Instance();
pinofal 9:b5608d3ee0b1 213 ble.init(bleInitComplete);
pinofal 9:b5608d3ee0b1 214 /*************** END BLE Main ***********/
pinofal 9:b5608d3ee0b1 215
pinofal 9:b5608d3ee0b1 216
pinofal 9:b5608d3ee0b1 217
pinofal 9:b5608d3ee0b1 218 }
pinofal 9:b5608d3ee0b1 219