This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to send sensor data using AT commands to a device using Uart in segger embedded studio

Hi, I am new to NRF and segger embedded studio.

So I want to send temperature sensor data connected with nrf52840 DK to the Murata1_SC  device using UART.

The data will be sent using AT Commands.

So how to send AT Commands in Segger embedded studio.

Thank you for the help in advance.

Parents
  • 
    #include <stdbool.h>
    #include <stdint.h>
    #include <stdio.h>
    #include "app_uart.h"
    #include "app_error.h"
    #include "nrf_delay.h"
    #include "nrf.h"
    #include "bsp.h"
    #include "nrf_uart.h"
    
    #define UART_TX_BUFF_SIZE 128
    #define UART_RX_BUFF_SIZE 128
    
    #define UART_HWFC APP_UART_FLOW_CONTROL_DISABLED
    
    void uart_err_handle(app_uart_evt_type_t * p)
    {
      
    
    }
    
    int main(void)
    {
      uint32_t err_code;
    
      bsp_board_init(BSP_INIT_LEDS);
      
      const app_uart_comm_params_t com_params = 
       {
        RX_PIN_NUMBER,
        TX_PIN_NUMBER,
        RTS_PIN_NUMBER,
        CTS_PIN_NUMBER,
        UART_HWFC,
        false,
        NRF_UART_BAUDRATE_115200
        };
    
      APP_UART_FIFO_INIT(&com_params, UART_RX_BUFF_SIZE, UART_TX_BUFF_SIZE, uart_err_handle, APP_IRQ_PRIORITY_LOWEST, err_code);
    
      APP_ERROR_CHECK(err_code);
      
      printf("Hello PC from Nordic Device!!!\r\n");
      
      while(true)
      {
        uint8_t cr;
    
        while(app_uart_get(&cr) != NRF_SUCCESS);//wait here for the character from pc
        if(cr == 'o')
        {
          bsp_board_leds_on();
          printf("Leds are ON\r\n");
        }
        if(cr == 'f')
        {
          bsp_board_leds_off();
          printf("Leds are OFF\r\n");
        }
      }
    }
    
    
    
    

  • I have seen this code

    uart_putstring((uint8_t*)"AT\r");
    nrf_delay_ms(2000);
    uart_putstring((uint8_t*)"AT+CMGF=1\r");
           nrf_delay_ms(2000);
    uart_putstring((uint8_t*)"AT+CMGS=\"8919242248\"\r");
       nrf_delay_ms(2000);
       uart_putstring((uint8_t*)"test\r");
              nrf_delay_ms(2000);
              app_uart_put((char)0x1A);   ///used (uint8_t) 26 also but no response..
                     nrf_delay_ms(1000);

    in this link, where someone is saying to wait for the response, so how can i do that.

  • I am using hardware pins,but i am able to make communication with device.

  • Hi by using the above code, I am not able to send anything.

    But I tried the following code to send data to Arduino and I am able to send the data.

    
    #include <stdbool.h>
    #include <stdint.h>
    #include <stdio.h>
    #include "app_uart.h"
    #include "app_error.h"
    #include "nrf_delay.h"
    #include "nrf.h"
    #include "bsp.h"
    #include "nrf_uart.h"
    
    //#define RX_PIN_NUMBER 27 //8
    //#define TX_PIN_NUMBER 26 //6
    //#define CTS_PIN_NUMBER 12 //7
    //#define RTS_PIN_NUMBER 11 //5
    
    
    #define UART_TX_BUFF_SIZE 256
    #define UART_RX_BUFF_SIZE 256
    
    #define UART_HWFC APP_UART_FLOW_CONTROL_DISABLED
    
    void uart_err_handle(app_uart_evt_type_t * p)
    {
      
    
    }
    
    int main(void)
    {
      uint32_t err_code;
    
      bsp_board_init(BSP_INIT_LEDS);
      
      const app_uart_comm_params_t com_params = 
       {
        RX_PIN_NUMBER,
        TX_PIN_NUMBER,
        RTS_PIN_NUMBER,
        CTS_PIN_NUMBER,
        UART_HWFC,
        false,
        NRF_UART_BAUDRATE_115200
        };
    
      APP_UART_FIFO_INIT(&com_params, UART_RX_BUFF_SIZE, UART_TX_BUFF_SIZE, uart_err_handle, APP_IRQ_PRIORITY_LOWEST, err_code);
    
      APP_ERROR_CHECK(err_code);
      
      printf("Hello PC from Nordic\r\n");
      
      while(true)
      {
        uint8_t cr;
    
        while(app_uart_get(&cr) != NRF_SUCCESS);//wait here for the character from pc
        if(cr == 'OK')
        {
          bsp_board_leds_on();
          printf("Leds are ON\r\n");
        }
        if(cr == 'ERROR')
        {
          bsp_board_leds_off();
          printf("Leds are OFF\r\n");
        }
      }
    }
    
    
    
    
     

    Also, I am confused that by changing these pins

    #define RX_PIN_NUMBER 27 //8
    #define TX_PIN_NUMBER 26 //6
    #define CTS_PIN_NUMBER 12 //7
    #define RTS_PIN_NUMBER 11 //5
    

    Could I able to change the hardware UART to Software UART

    Because Hardware UART is used by Debugger 

  • Hi,

    What's the exact issue you are having ? 
    Can you develop your app based on the uart example in the SDK or the example that you found working above ? 

    I don't really understand what you meant by Software UART ? 

    What did you mean by "hardware UART is used by debugger" ? 
    Calling this: 

    #define RX_PIN_NUMBER 27 //8
    #define TX_PIN_NUMBER 26 //6
    #define CTS_PIN_NUMBER 12 //7
    #define RTS_PIN_NUMBER 11 //5

    Will degine the RX pin to pin P0.27 on the chip. TX pin to P0.26 on the chip, and so on. 

  • don't really understand what you meant by Software UART

    I presume he means bit-banging it in software?

    Doesn't seem much point in doing that when the nRF52840 has 2 "real" (ie, hardware) UARTS?

    RX pin to pin P0.27 on the chip. TX pin to P0.26

    How does it work for P1.xx pins ?

Reply Children
No Data
Related