概述
- 前言
· 第一次写博客,这些也是参照前辈的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
最后
以上就是生动火为你收集整理的第一篇:如何通过串口发送给esp8266,并且通过MQTT发布出去的全部内容,希望文章能够帮你解决第一篇:如何通过串口发送给esp8266,并且通过MQTT发布出去所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复