esp32 connecting to ble

General discussion on mikroC PRO for PIC32.
Post Reply
Author
Message
dima.j
Posts: 1
Joined: 05 Mar 2021 21:29

esp32 connecting to ble

#1 Post by dima.j » 09 Mar 2021 19:28

I am trying to connect to esp32 ble. I have the PIC32MX and using mikroC PRO.

Wifi is working but bluetooth is not.

Code: Select all

#include "tft_resources.h"
#include <stdbool.h>

// module connections
sbit WIFI_3_EN         at RC2_bit;
sbit WIFI_3_EN_DIR     at TRISC2_bit;
sbit WIFI_3_RST        at RC1_bit;
sbit WIFI_3_RST_DIR    at TRISC1_bit;

sbit BLE_3_EN         at RC2_bit;
sbit BLE_3_EN_DIR     at TRISC2_bit;
sbit BLE_3_RST        at RC1_bit;
sbit BLE_3_RST_DIR    at TRISC1_bit;

extern void BLE_Configure();
extern void WiFI_Configure();

// Responses to parse
const OK = 1;
const ERROR = 2;
const NO_CHANGE = 3;
const FAIL = 4;
const READY = 5;
const SEND = 6;

char ip_address[40];
unsigned short i;
unsigned short DataReady;
unsigned int oldstate;
unsigned int length;

char txt_val[ 10 ];
char state;
char response_rcvd;
char responseID, response = 0;
char is_receiving_data = 0;
char LED_switching = 0;
int cntr = 0;

// Change following information to match your network settings
unsigned char *SSID = "";
unsigned char *password = "";
char txt1[] = "<a href=\"https://www.mikroe.com/\">MikroElektronika</a>";
char txt2[] = "<h1 style=\"color:red;\">WiFi ESP click board</h1>";
char txt3[] = "<h1>Server example</h1";
char txt4[] = "<p> LED RA0 is ";

static char _BLE_AT_BLEINIT    [ 15 ] = "AT+BLEINIT=2";
static char _BLE_AT_BLEADVSTART[ 25 ] = "AT+BLEADVSTART";
static char _BLE_AT_BLEADVDATA [ 25 ] = "AT+BLEADVDATA=";

bool A0_change = false;

char txt_state_A0[9] = "OFF</p>";

char data_[ 500 ] = { 0 };

// Get response
char Get_Response()
{
  if (response_rcvd)
  {
    response_rcvd = 0;
    return responseID;
  }
  else
    return 0;
}

void BLE_Init(){
     BLE_3_EN = 1;
     delay_ms(500);
     BLE_3_RST = 0;
     delay_ms(500);
     BLE_3_RST = 1;
     Delay_ms(2000);
     }

void WiFi_Init()
{
  WIFI_3_EN = 1;
  delay_ms(500);
  WIFI_3_RST = 0;                         // Perform reset procedure
  delay_ms(500);
  WIFI_3_RST = 1;
  Delay_ms(2000);
}

void sending_data( void )
{
   UART2_Write_Text("AT+CIPSEND=0");
   UART2_Write_Text(",");
   UART2_Write_Text( txt_val );
   UART2_Write(0x0D);
   UART2_Write(0x0A);
   Delay_ms(100);
   UART2_Write_Text( data_ );

   Delay_ms( 200 );

   UART2_Write_Text("AT+CIPSEND=1");
   UART2_Write_Text(",");
   UART2_Write_Text( txt_val );
   UART2_Write(0x0D);
   UART2_Write(0x0A);
   Delay_ms(100);
   UART2_Write_Text( data_ );

   Delay_ms( 200 );

   UART2_Write_Text("AT+CIPSEND=2");
   UART2_Write_Text(",");
   UART2_Write_Text( txt_val );
   UART2_Write(0x0D);
   UART2_Write(0x0A);
   Delay_ms(100);
   UART2_Write_Text( data_ );

   Delay_ms( 200 );

   UART2_Write_Text("AT+CIPSEND=3");
   UART2_Write_Text(",");
   UART2_Write_Text( txt_val );
   UART2_Write(0x0D);
   UART2_Write(0x0A);
   Delay_ms(100);
   UART2_Write_Text( data_ );
}

void WiFi_Send()
{
    if( !LED_switching ) {

    length += strlen( txt1 );
    length += strlen( txt2 );
    length += strlen( txt4 );
    length += strlen( txt_state_A0 );

    IntToStr( length, txt_val );
    Ltrim( txt_val );

    strcat( data_, txt1 );
    strcat( data_, txt2 );
    strcat( data_, txt4 );
    strcat( data_, txt_state_A0 );
    Rtrim( data_ );

    sending_data();
    }
    else
    {
       if ( A0_change )
       {
         A0_change = false;
         length += strlen( txt4 );
         length += strlen( txt_state_A0 );
         strcat( data_, txt4 );
         strcat( data_, txt_state_A0 );
       }

       IntToStr( length, txt_val );
       Ltrim( txt_val );
       Rtrim( data_ );

       sending_data();
    }

    strcpy(data_, "");
    length = 0;

    Delay_ms(100);
}

void BLE_Send()
{
    if( !LED_switching ) {

    length += strlen( txt1 );
    length += strlen( txt2 );
    length += strlen( txt4 );
    length += strlen( txt_state_A0 );

    IntToStr( length, txt_val );
    Ltrim( txt_val );

    strcat( data_, txt1 );
    strcat( data_, txt2 );
    strcat( data_, txt4 );
    strcat( data_, txt_state_A0 );
    Rtrim( data_ );

    sending_data();
    }
    else
    {
       if ( A0_change )
       {
         A0_change = false;
         length += strlen( txt4 );
         length += strlen( txt_state_A0 );
         strcat( data_, txt4 );
         strcat( data_, txt_state_A0 );
       }

       IntToStr( length, txt_val );
       Ltrim( txt_val );
       Rtrim( data_ );

       sending_data();
    }

    strcpy(data_, "");
    length = 0;

    Delay_ms(100);
}

void main() {

  // Initialize variables
  length = 0;
  state = 0;
  response_rcvd = 0;
  responseID = 0;
  response = 0;
  i = 0;

  AD1PCFG = 0xFFFF;            // Configure AN pins as digital I/O
  JTAGEN_bit = 0;              // Disable JTAG

  BLE_3_EN_DIR = 0;           //added
  BLE_3_RST_DIR = 0;          //added
  
  WIFI_3_EN_DIR = 0;
  WIFI_3_RST_DIR = 0;
  TRISA4_bit = 1;
  TRISA0_bit = 0;
  LATA4_bit = 0;

  // UART
  UART2_Init( 115200 );
  Delay_ms( 100 );

  U2IP0_bit = 0;
  U2IP1_bit = 1;
  U2IP2_bit = 1;
  U2RXIE_bit = 1;
  EnableInterrupts();
    
  display_init();
  TFT_Set_Font( &Tahoma15x16_Bold, CL_RED, FO_HORIZONTAL );

  // Initialize WiFI module
  WiFi_Init();
  BLE_Init();     
                                                         //added
  //Setting WiFi Mode - station mode
  BLE_Configure();                                                               //added
  WiFI_Configure();

  state = 100;
  i = 0;

  TFT_Write_Text("Please connect to your STAIP address...", 20, 175);
  // Waiting for multiple connections to Server STAIP
  Delay_ms(20000);

  // Sending Initial data to server
  BLE_Send();                                                                    //added
  WiFi_Send();

  TFT_Write_Text("Entering button toggling loop.", 20, 190);
  TFT_Write_Text("Observe changes on server.", 20, 205);

  //LED_switching = 1;
/*while( 1 )
    {
      // detect logical one on PA4 pin
      if (Button(&PORTA, 4, 1, 1))
      {
       oldstate = 1;
      }
      // detect logical one-to-zero transition on PA4 pin
      if (oldstate && Button(&PORTA, 4, 1, 0))
      {
        if ( !strcmp(txt_state_A0, "OFF</p>" ))
        {
          strncpy( txt_state_A0, "ON </p>", 8 );
          LATA0_bit = 1;
        }
        else
        {
          strncpy( txt_state_A0, "OFF</p>", 8 );
          LATA0_bit = 0;
        }
        oldstate = 0;
        A0_change = true;
        WiFi_Send();
        BLE_Send();
      }
    }
}*/

// Uart Rx interrupt handler
/*void UART2interrupt() iv IVT_UART_2 ilevel 6 ics ICS_AUTO
{
      if( IFS1 & ( 1 << U2RXIF ))
      {
    char tmp = UART2_Read();*/                         // Get received byte
    // Process reception through state machine
 /*switch (state) {
      case 0: {
                response = 0;                   // Clear response
                if (tmp == 'O')
                  state = 1;
                if (tmp == 'E')
                  state = 10;
                if (tmp == 'n')
                  state = 20;
                if (tmp == 'F')
                  state = 30;
                if (tmp == 'A')
                  state = 40;
                if (tmp == '+')
                  state = 54;

                if (tmp == 'r')
                  state = 50;

                if (tmp == '>')
                {
                  state = 0;
                response = SEND;
                response_rcvd = 1;
                responseID = response;

                }
                break;
      }

      case 1: {
                if (tmp == 'K'){
                  response = OK;                // OK
                  state = 2;
                }
                else
                  state = 0;
                break;
      }

      case 10: {
                if (tmp == 'R')
                  state = 11;
                else
                  state = 0;
                break;
      }

      case 11: {
                if (tmp == 'R')
                  state = 12;
                else
                  state = 0;
                break;
      }

      case 12: {
                if (tmp == 'O')
                  state = 13;
                else
                  state = 0;
                break;
      }

      case 13: {
                if (tmp == 'R') {
                  response = ERROR;             // ERROR
                  state = 2;
                }
                else
                  state = 0;
                break;
      }

      case 20: {
                if (tmp == 'o')
                  state = 21;
                else
                  state = 0;
                break;
      }

      case 21: {
                if (tmp == ' ')
                  state = 22;
                else
                  state = 0;
                break;
      }

      case 22: {
                if (tmp == 'c')
                  state = 23;
                else
                  state = 0;
                break;
      }

      case 23: {
                if (tmp == 'h')
                  state = 24;
                else
                  state = 0;
                break;
      }

      case 24: {
                if (tmp == 'a')
                  state = 25;
                else
                  state = 0;
                break;
      }

      case 25: {
                if (tmp == 'n')
                  state = 26;
                else
                  state = 0;
                break;
      }

      case 26: {
                if (tmp == 'g')
                  state = 27;
                else
                  state = 0;
                break;
      }

      case 27: {
                if (tmp == 'e'){
                  response = NO_CHANGE;         // NO CHANGE
                  state = 2;
                }
                else
                  state = 0;
                break;
      }

      case 30: {
                if (tmp == 'A')
                  state = 31;
                else
                  state = 0;
                break;
      }

      case 31: {
                if (tmp == 'I')
                  state = 32;
                else
                  state = 0;
                break;
      }

      case 32: {
                if (tmp == 'L') {
                  response = FAIL;              // FAIL
                  state = 2;
                }
                else
                  state = 0;
                break;
      }

      case 40: {
                if (tmp == 'T')
                  state = 41;
                else
                  state = 0;
                break;
      }

      case 41: {
                if (tmp == '+')
                  state = 42;
                else
                  state = 0;
                break;
      }

      case 42: {
                if (tmp == 'C')
                  state = 43;
                else
                  state = 0;
                break;
      }

      case 43: {
                if (tmp == 'I')
                  state = 44;
                else
                  state = 0;
                break;
      }

      case 44: {
                if (tmp == 'F')
                  state = 45;
                else
                  state = 0;
                break;
      }

      case 45: {
                if (tmp == 'S')
                  state = 46;
                else
                  state = 0;
                break;
      }

      case 46: {
                if (tmp == 'R')
                  state = 47;
                else
                  state = 0;
                break;
      }

      case 47: {
                if (tmp == 10) {
                  state = 48;
                  i = 0;
                }
                else if (tmp == 13){

                }
                else
                  state = 0;
                break;
      }

      case 48: {
                if (tmp == 13){
                  state = 3;
                  response = OK;
                }
                else {
                  ip_address[i] = tmp;              // get IP address
                  i++;
                }
                break;
      }

      case 50: {
                if (tmp == 'e')
                  state = 51;
                else
                  state = 0;
                break;
      }

      case 51: {
                if (tmp == 'a')
                  state = 52;
                else
                  state = 0;
                break;
      }

      case 52: {
                if (tmp == 'd')
                  state = 53;
                else
                  state = 0;
                break;
      }

      case 53: {
                if (tmp == 'y') {
                  response = READY;              // READY
                  state = 2;
                }
                else
                  state = 0;
                break;
      }

       case 54: {
                state = 0;
                response = SEND;
                response_rcvd = 1;
                responseID = response;
                break;
      }

      case 2: {
                if (tmp == 13)
                  state = 3;
                else
                  state = 0;
                break;
      }

      case 3: {
                if (tmp == 10){
                  response_rcvd = 1;
                  responseID = response;
                }
                state = 0;
                break;
      }

      default: {
                state = 0;
                break;
      }
    }
  U2RXIF_bit = 0;
  }*/
}
I am trying to connect to esp32 ble. I have the PIC32MX and using mikroC PRO.

Bluetooth was working at some point but it is no longer working now. I attached some of the code.

User avatar
filip
mikroElektronika team
Posts: 11874
Joined: 25 Jan 2008 09:56

Re: esp32 connecting to ble

#2 Post by filip » 19 Mar 2021 08:19

Hi,

I believe you have opened a ticket on HelpDesk so we can continue there.

Regards,
Filip.

Post Reply

Return to “mikroC PRO for PIC32 General”