中移M5311-NBIOT-OPENCPU开发-HTTP串口收发器
实现功能:单片机串口发送HTTP-GET请求给M5311,M5311发送HTTP请求,接受返回数据,M5311串口发送回单片机
opencpu_uart_demo.c
#include "m5311_opencpu.h"
#define OPENCPU_MAIN_UART HAL_UART_1
unsigned char uart_cmd = 0;
char buffer[300];
char *pbuf;
//uart中断回调函数
static void user_uart_callback(hal_uart_callback_event_t status, void *user_data){
pbuf = buffer;
int temp1;
if(status == HAL_UART_EVENT_READY_TO_READ)
{
memset(buffer,0,300);
temp1 = opencpu_uart_receive(OPENCPU_MAIN_UART, pbuf, 300);
uart_cmd = 'f';
}
}
/*
打印函数
*/
void opencpu_printf (const char *str, ...){
static unsigned char s[600]; //This needs to be large enough to store the string TODO Change magic number
int i,j;
unsigned char *p;
va_list args;
int str_len;
if ((str == NULL) || (strlen(str) == 0))
{
return;
}
va_start (args, str);
str_len = (unsigned int)vsprintf ((char*)s, str, args);
va_end (args);
p =s;
while(str_len > 0)
{
j = opencpu_uart_send(OPENCPU_MAIN_UART, p, str_len);
p=p+j;
str_len = str_len - j;
}
}
void custom_uart_init(void)
{
opencpu_uart_open(OPENCPU_MAIN_UART,HAL_UART_BAUDRATE_115200,user_uart_callback);
}
m5311_opencpu.c
#include "m5311_opencpu.h"
extern unsigned int OC_DEBUG_CHANNEL;
void send_http_data(){
char* url;
url = "";
char *name = (char *) malloc(strlen(url) + strlen(pbuf));
sprintf(name, "%s%s", url, pbuf);
httpclient_t client = {0};
httpclient_data_t client_data = {0};
char *buf = NULL;
buf = pvPortMalloc(600);
if (buf == NULL) {
opencpu_printf("Malloc failed.\r\n");
return;
}
memset(buf, 0, sizeof(buf));
client_data.response_buf = buf;
client.timeout_in_sec = 20;
client_data.response_buf_len = 600;
oc_httpclient_get(&client, name, &client_data);
opencpu_printf("%s\r\n",client_data.response_buf);
}
void test_all_in_one(){
custom_uart_init();
opencpu_lock_light_sleep(); // 禁止进入休眠
//获取网络注册状态,并阻塞等待网络注册成功
while(opencpu_cgact()!=1){
vTaskDelay(10);
}
opencpu_printf("networkSuccess\n");
uart_cmd = 0;
while(1){
if(uart_cmd == 'f'){
uart_cmd = 0;
//opencpu_printf("data:%s \r\n",pbuf);
send_http_data();
}
vTaskDelay(10);
}
}
//opencpu主任务函数
void opencpu_task_main()
{
test_all_in_one();
vTaskDelete(NULL);
}
/*
新建opencpu任务,这个函数用户不可更改
*/
void test_opencpu_start()
{
xTaskCreate(opencpu_task_main,"opencpu",1024,NULL,TASK_PRIORITY_NORMAL,NULL);
}
m5311_opencpu.h
// 增加一行
extern char buffer[300];