第一篇:如何通过串口发送给esp8266,并且通过MQTT发布出去

  • 前言

·   第一次写博客,这些也是参照前辈的Demo做出来的一个可以通过串口,发送给esp8266,esp8266再由通过MQTT协议发布三个主题出去。

  • 问题

我看了别人的博客,发现他们所应用的串口文件不能修改,所以我找到了对应的方法去修改nonos文件,包括改变Makefile文件,替换文件等。我已经整合在我的Demo里面,大家可以去下载。

  • 功能展示

在串口输入数据,通过外部服务器定时以“Great_XieBM”为主题发布字符串“1”,从Esp8266里面分别取出3个数据。

  • 这里是我发布数据的格式,在usart.c里面改
uart0_rx_intr_handler(void *para)
  {
	int fifo_len;
	uart_rx_intr_disable(UART0);//关闭中断
	WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);
	CLEAR_PERI_REG_MASK(UART_INT_ENA(UART0),UART_TXFIFO_EMPTY_INT_ENA);
	fifo_len=(READ_PERI_REG(UART_STATUS(UART0))>>UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
	uint8 idx=0;
	uint8 d_tmp[20]={0};
for(idx=0;idx<fifo_len;idx++){
		d_tmp[idx]=READ_PERI_REG(UART_FIFO(UART0)) &0xFF;
	}
			for(idx=1;idx<5;idx++)
			{
				temp[idx-1]=d_tmp[idx];
			}
			for(idx=6;idx<10;idx++)
			{
				swich[idx-6]=d_tmp[idx];
			}
			for(idx=11;idx<15;idx++)
			{
				airswich[idx-11]=d_tmp[idx];
			}
		WRITE_PERI_REG(UART_INT_CLR(UART0),UART_RXFIFO_FULL_INT_CLR|UART_RXFIFO_TOUT_INT_CLR);
	uart_rx_intr_enable(UART0);
}
  • MQTT里面发布的数据
extern uint8 temp[4];
extern uint8 swich[4];
extern uint8 airswich[4];
uint8  TempBuff[4]={0};
uint8  SwichBuff[4]={0};
uint8  AirswichBuff[4]={0};
void mqttDataCb(uint32_t *args, const char* topic, uint32_t topic_len, const char *data, uint32_t data_len)
{
	MQTT_Client* client = (MQTT_Client*) args;
	uint8  TempBuff[4]={0};
	int ida=0 ;
	for (ida=0;ida<4;ida++){
		TempBuff[ida]=temp[ida];
		SwichBuff[ida]=swich[ida];
		AirswichBuff[ida]=airswich[ida];
	}
	if (data[0] == '1') {
		GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);
				MQTT_Publish(client, "temperature", TempBuff,
						4, 0, 0);
				MQTT_Publish(client, "SwichBuff", SwichBuff,
						4, 0, 0);
				MQTT_Publish(client, "AirswichBuff", AirswichBuff,
						4, 0, 0);
	}
}
  • 一开始接入串口助手

一开始接入串口助手
在这里插入图片描述
在这里插入图片描述

  • 实验结果
  • 在这里插入图片描述

另外我用的是通讯猫所提供的MQTT服务器,大家可以自行百度。

参考链接:https://blog.csdn.net/xh870189248/article/details/78777371
我的Demo:https://download.csdn.net/download/weixin_43262746/10683079

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值