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

UART problem NRF9160(Icarus) to ESP8266

Hello,

at the moment I am trying to get the NRF9160 Icarus Board to communicate with an ESP8266 Board within serial modem mode. I just need to send some AT commands through UART but I don't get any answer from the ESP8266. The communication with the ESP8266 works fine, if I attache it to my PC and using Putty. I can only get the first message printed out through the Icarus Board, if I reset the ESP8266 at the right time. I am using the exact same configuration (data, stop, parity bit) as Putty and I am always sending the carriage return and line feed at the end of my messages but the ESP still won't answer. Can you please have a look on my code so far? 


//actinius_icarus_common.dts
&uart1 {
	status = "okay";

	current-speed = <115200>;
	tx-pin = <24>;
	rx-pin = <23>;
	label = "mainuart";
};
//prj.conf
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_ASYNC_API=y
CONFIG_TRUSTED_EXECUTION_NONSECURE=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_BSD_LIBRARY_TRACE_ENABLED=n


//main.c
#include <zephyr.h>
#include <sys/printk.h>
#include <drivers/uart.h>
#include <string.h>

static K_FIFO_DEFINE(fifo_uart_tx_data);
static K_FIFO_DEFINE(fifo_uart_rx_data);
static uint8_t uart_buf[1024];

struct uart_data_t {
	void  *fifo_reserved;
	uint8_t    data[1024];
	uint16_t   len;
};

const struct uart_config uart_cfg = {
	.baudrate	= 115200,
	.parity		= UART_CFG_PARITY_NONE,
	.stop_bits	= UART_CFG_STOP_BITS_1,
	.data_bits	= UART_CFG_DATA_BITS_8,
	.flow_ctrl	= UART_CFG_FLOW_CTRL_NONE,
    };
const struct device *uart_dev;

static void uart_irq_handler(const struct device *x, void *context)
{
	uint8_t buf[] = {1, 2, 3, 4, 5};

	if (uart_irq_tx_ready(x)) {
		(void)uart_fifo_fill(x, buf, sizeof(buf));
		uart_irq_tx_disable(x);
	}

	if (uart_irq_rx_ready(x)) {
		uint8_t buf[10];
		int len = uart_fifo_read(x, buf, sizeof(buf));
		printk("Received data is:%s\r\n", buf);
		if (buf == '\r') {
			printk("carriage Return");
		}
		if (buf == '\n') {
			printk("LineFeed");
		}

		if (len) {
			printk("read %d bytes\n", len);
		}
	}
}


void uart_sendCOM(const struct device *x,  uint8_t *Cont)
{

         uint16_t len = strlen(Cont);
         uart_fifo_fill(x, Cont,len );
         uart_irq_tx_enable(x);


}

void main(void)
{


        uart_dev = device_get_binding("mainuart");
        if (!uart_dev) {
					printk("error\r\n");
				}
				bool ret;
				ret = uart_configure(uart_dev, &uart_cfg);
				if (ret != 0) {
					printk("UART can not be configured!\n");
				}

        uart_irq_rx_disable(uart_dev);
				uart_irq_tx_disable(uart_dev);
        uart_irq_callback_set(uart_dev, uart_irq_handler); // Set UART interrupt callback
        uart_irq_rx_enable(uart_dev);

        uart_irq_tx_enable(uart_dev);

        k_sleep(K_MSEC(100));
				printk("UART loopback start!\n");

	while (1) {
				printk("SendingAT..... \n");
				uart_sendCOM(uart_dev, "AT\r\n");
				k_sleep(K_MSEC(5000));

	}
}

Parents Reply Children
No Data
Related