【MAX7800与ESP8266mcu串口通讯点灯】

news2024/12/27 4:16:23

【MAX7800与ESP8266mcu通讯】

  • 1. 前言
  • 2. 实验条件
    • 2.1 硬件条件
    • 2.2 软件条件
  • 3. 程序编写
    • 3.1 ESP8266程序解剖
    • 3.2 MAX7800程序解剖
  • 4. 实验效果
    • 4.1 esp8266打印如下
    • 4.2 max7800打印如下
  • 5. 小结

在这里插入图片描述

1. 前言

前期搭好MAX7800 的eclipse和ESP82666的Arduino开发环境,现在开始慢慢实现这两者的通讯,目前MAX7800 羽毛板可以发送字符串,但是ESP8266无法连续接收,因此采用简单的单个字符的串口通讯实现点灯功能
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

不要问我D0为什么不行,波特率在9600以下都可以,因为它本身不适合🤣🤣🤣

2. 实验条件

2.1 硬件条件

本次采用ESP8266node MCU开发板和MAX7800羽毛板,利用ESP8266软串口通讯与MAX7800 UART2硬串口搭建单字符通讯,采用关键字符实现开关灯功能

名称端口
LED+接D2,-接GND
ESP8266P1_1接D3,P1_0接D1,GND接GND,mcro数据线
MAX7800P1_1接D3,P1_0接D1,GND接GND,mcro数据线

在这里插入图片描述

2.2 软件条件

ESP8266-NodeMCU物联网开发之Arduino环境搭建
【window下配置Maxim SDK环境】

3. 程序编写

3.1 ESP8266程序解剖

三个子程序

  1. 读取软硬串口字符
  2. 打印两次不同的字符
  3. 测试ok字符

主程序

  1. 读取软硬串口
  2. 判别是否为ok
  3. 是则灯亮,进而判别是否为stop,退出
    在这里插入图片描述
    源代码

#include <SoftwareSerial.h>

volatile int item;
volatile int item1;
SoftwareSerial mySerial(0,5);

void procedure() {
  if (item != item1) {
    Serial.print("item:  ");
    Serial.println(item);
    item1 = item;

  }
}

void procedure2() {
  if (Serial.available() > 0) {
    item = Serial.read();

  }
  if (mySerial.available() > 0) {
    item = mySerial.read();

  }
}

void procedure3() {
  Serial.println("ok");
}

void setup(){
  item = 0;
  item1 = 0;
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(4, OUTPUT);
  digitalWrite(4,LOW);
  Serial.println(item);
  mySerial.println(item);
}

void loop(){
  delay(100);
  procedure2();
  procedure();
  while (item == '1') {
    procedure3();
    delay(100);
    digitalWrite(4,HIGH);
    procedure2();
    procedure();
    if (item == '0') {
      digitalWrite(4,LOW);
      break;

    }
  }

}

3.2 MAX7800程序解剖

采用uart实例教程改写而成
按照1:4时间比例发送01,对此esp8266按照此间隔刷新LED灯亮灭

******************************************************************************/

/**
 * @file    main.c
 * @brief   UART!
 * @details This example demonstrates the UART Loopback Test.
 */

/***** Includes *****/
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "mxc_device.h"
#include "led.h"
#include "board.h"
#include "mxc_delay.h"
#include "uart.h"
#include "dma.h"
#include "nvic_table.h"
#include "mxc_delay.h"
/***** Definitions *****/
#define DMA

#define UART_BAUD 9600
//#define UART_BAUD 115200
#define BUFF_SIZE 1024
#define BUFF1_SIZE 12

/***** Globals *****/
volatile int READ_FLAG;
volatile int DMA_FLAG;

#if defined(BOARD_EVKIT_V1)
#define READING_UART 1
#define WRITING_UART 2
#elif defined(BOARD_FTHR_REVA)
//#define READING_UART 2
#define READING_UART 2
#define WRITING_UART 2
#else
#warning "This example has been written for the MAX78000 Ev Kit or FTHR board."
#endif

/***** Functions *****/
#ifdef DMA
void DMA_Handler(void)
{
    MXC_DMA_Handler();
    DMA_FLAG = 0;
}
#else
void UART_Handler(void)
{
    MXC_UART_AsyncHandler(MXC_UART_GET_UART(READING_UART));
}
#endif

void readCallback(mxc_uart_req_t *req, int error)
{
    READ_FLAG = error;
}

void writemsg(uint8_t *TxData,int BUFF)
{
    mxc_uart_req_t write_req;
    write_req.uart = MXC_UART_GET_UART(WRITING_UART);
    write_req.txData = TxData;
    write_req.txLen = BUFF;
    write_req.rxLen = 0;
    write_req.callback = NULL;

    MXC_UART_Transaction(&write_req);
    MXC_Delay(100000);
}
/******************************************************************************/
int main(void)
{
    int error,  fail = 0;
//    uint8_t TestTxData[BUFF1_SIZE];
    uint8_t RxData[BUFF_SIZE];

    printf("\n\n**************** UART Example ******************\n");
    printf("This example sends data from one UART to another.\n");
    printf("\nConnect the TX pin of UART%d to the RX pin of UART%d for this example.\n",
           WRITING_UART, READING_UART);

    printf("\n-->UART Baud \t: %d Hz\n", UART_BAUD);
    printf("\n-->Test Length \t: %d bytes\n", BUFF_SIZE);

    memset(RxData, 0x0, BUFF_SIZE);

#ifdef DMA
    MXC_DMA_Init();
    MXC_DMA_ReleaseChannel(0);
    MXC_NVIC_SetVector(DMA0_IRQn, DMA_Handler);
    NVIC_EnableIRQ(DMA0_IRQn);
#else
    NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ(READING_UART));
    NVIC_DisableIRQ(MXC_UART_GET_IRQ(READING_UART));
    MXC_NVIC_SetVector(MXC_UART_GET_IRQ(READING_UART), UART_Handler);
    NVIC_EnableIRQ(MXC_UART_GET_IRQ(READING_UART));
#endif

    // Initialize the UART
    if ((error = MXC_UART_Init(MXC_UART_GET_UART(READING_UART), UART_BAUD, MXC_UART_APB_CLK)) !=
        E_NO_ERROR) {
        printf("-->Error initializing UART: %d\n", error);
        printf("-->Example Failed\n");
        while (1) {}
    }

    if ((error = MXC_UART_Init(MXC_UART_GET_UART(WRITING_UART), UART_BAUD, MXC_UART_APB_CLK)) !=
        E_NO_ERROR) {
        printf("-->Error initializing UART: %d\n", error);
        printf("-->Example Failed\n");
        while (1) {}
    }

    printf("-->UART Initialized\n\n");


    READ_FLAG = 1;
    DMA_FLAG = 1;
    uint8_t *firstName = "0\n";
    uint8_t *lastName = "1\n";
    if (fail == 0) {
		LED_On(LED1);
		printf("\n-->EXAMPLE SUCCEEDED\n");
		int count=0;
		while(1){
			printf("count : %d\n", count++);
//			sprintf(TestTxData, "%s%d\n", firstName, count);
//			writemsg( TestTxData, BUFF1_SIZE);
			MXC_Delay(200000);
			if(count%5==0){
				writemsg( lastName, 1);
			}
			else
				writemsg( firstName, 1);
			MXC_Delay(500000);
		}
    }
    return fail;
}

下面给出max7800输出字符串代码,无法与esp8266通讯,暂时没有找到原因🤣🤣🤣

/**
 * @file    main.c
 * @brief   UART!
 * @details This example demonstrates the UART Loopback Test.
 */

/***** Includes *****/
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "mxc_device.h"
#include "led.h"
#include "board.h"
#include "mxc_delay.h"
#include "uart.h"
#include "dma.h"
#include "nvic_table.h"
#include "mxc_delay.h"
/***** Definitions *****/
#define DMA

#define UART_BAUD 9600
//#define UART_BAUD 115200
#define BUFF_SIZE 1024
#define BUFF1_SIZE 12

/***** Globals *****/
volatile int READ_FLAG;
volatile int DMA_FLAG;

#if defined(BOARD_EVKIT_V1)
#define READING_UART 1
#define WRITING_UART 2
#elif defined(BOARD_FTHR_REVA)
//#define READING_UART 2
#define READING_UART 2
#define WRITING_UART 2
#else
#warning "This example has been written for the MAX78000 Ev Kit or FTHR board."
#endif

/***** Functions *****/
#ifdef DMA
void DMA_Handler(void)
{
    MXC_DMA_Handler();
    DMA_FLAG = 0;
}
#else
void UART_Handler(void)
{
    MXC_UART_AsyncHandler(MXC_UART_GET_UART(READING_UART));
}
#endif

void readCallback(mxc_uart_req_t *req, int error)
{
    READ_FLAG = error;
}

void writemsg(uint8_t *TxData,int BUFF)
{
    mxc_uart_req_t write_req;
    write_req.uart = MXC_UART_GET_UART(WRITING_UART);
    write_req.txData = TxData;
    write_req.txLen = BUFF;
    write_req.rxLen = 0;
    write_req.callback = NULL;

    MXC_UART_Transaction(&write_req);
}
/******************************************************************************/
int main(void)
{
    int error,  fail = 0;
    uint8_t TestTxData[BUFF1_SIZE];
    uint8_t RxData[BUFF_SIZE];

    printf("\n\n**************** UART Example ******************\n");
    printf("This example sends data from one UART to another.\n");
    printf("\nConnect the TX pin of UART%d to the RX pin of UART%d for this example.\n",
           WRITING_UART, READING_UART);

    printf("\n-->UART Baud \t: %d Hz\n", UART_BAUD);
    printf("\n-->Test Length \t: %d bytes\n", BUFF_SIZE);

    memset(RxData, 0x0, BUFF_SIZE);

#ifdef DMA
    MXC_DMA_Init();
    MXC_DMA_ReleaseChannel(0);
    MXC_NVIC_SetVector(DMA0_IRQn, DMA_Handler);
    NVIC_EnableIRQ(DMA0_IRQn);
#else
    NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ(READING_UART));
    NVIC_DisableIRQ(MXC_UART_GET_IRQ(READING_UART));
    MXC_NVIC_SetVector(MXC_UART_GET_IRQ(READING_UART), UART_Handler);
    NVIC_EnableIRQ(MXC_UART_GET_IRQ(READING_UART));
#endif

    // Initialize the UART
    if ((error = MXC_UART_Init(MXC_UART_GET_UART(READING_UART), UART_BAUD, MXC_UART_APB_CLK)) !=
        E_NO_ERROR) {
        printf("-->Error initializing UART: %d\n", error);
        printf("-->Example Failed\n");
        while (1) {}
    }

    if ((error = MXC_UART_Init(MXC_UART_GET_UART(WRITING_UART), UART_BAUD, MXC_UART_APB_CLK)) !=
        E_NO_ERROR) {
        printf("-->Error initializing UART: %d\n", error);
        printf("-->Example Failed\n");
        while (1) {}
    }

    printf("-->UART Initialized\n\n");


    READ_FLAG = 1;
    DMA_FLAG = 1;
    char *firstName = "count: ";

    if (fail == 0) {
        LED_On(LED1);
        printf("\n-->EXAMPLE SUCCEEDED\n");
        int count=0;
        while(1){
            printf("count : %d\n", count++);
            sprintf(TestTxData, "%s%d\n", firstName, count);
            writemsg( TestTxData, BUFF1_SIZE);
            MXC_Delay(500000);
        }
    }
    return fail;
}

4. 实验效果

4.1 esp8266打印如下

在这里插入图片描述

已打开串口: COM12
0
item:  49
ok
ok
ok
ok
ok
ok
ok
ok
item:  48
item:  49

4.2 max7800打印如下

在这里插入图片描述

19:28:30.829 -> 
19:28:30.829 -> 
19:28:30.832 -> **************** UART Example ******************
19:28:30.834 -> This example sends data from one UART to another.
19:28:30.838 -> 
19:28:30.838 -> Connect the TX pin of UART2 to the RX pin of UART2 for this example.
19:28:30.844 -> 
19:28:30.844 -> -->UART Baud 	: 9600 Hz
19:28:30.846 -> 
19:28:30.846 -> 
19:28:30.846 -> -->Test Length 	: 1024 bytes
19:28:30.848 -> -->UART Initialized
19:28:30.850 -> 
19:28:30.850 -> 
19:28:30.850 -> -->EXAMPLE SUCCEEDED
19:28:30.853 -> count : 0
19:28:31.651 -> count : 1
19:28:32.448 -> count : 2
19:28:33.245 -> count : 3
19:28:34.042 -> count : 4
19:28:34.839 -> count : 5

5. 小结

通过对这篇文章我们掌握了MAX7800与ESP8266mcu串口通讯点灯,接下来会有许多有趣的实验,尝试与Arduino通讯做语音小车,进而丰富我们的生活。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
🥳🥳🥳再次非常感谢大赛支持和胡同学🥳🥳🥳
参考文献:
window10下配置Maxim SDK
数据手册
MAX78000板卡项目汇总
应用笔记
【window下配置Maxim SDK环境】
【MAX78000基础案例演示】
MAX78000 关键字定位演示 v.3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕设Python+Vue校园网上二手交易系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

非零基础自学Golang 第8章 包管理 8.2 包的声明 8.3 包的导入

非零基础自学Golang 文章目录非零基础自学Golang第8章 包管理8.2 包的声明8.3 包的导入8.3.1 导入声明8.3.2 远程导入8.3.3 别名导入8.3.4 匿名导入第8章 包管理 8.2 包的声明 包是结构化代码的一种方式&#xff1a;每个程序都由包&#xff08;通常简称为pkg&#xff09;的概…

35岁程序员:被大厂裁员后,我赚到手的却是这样:

这两年互联网行业一直不平静&#xff0c;都得都懂。认识一兄弟&#xff0c;技术不错&#xff0c;p7&#xff0c;干架构的&#xff0c;也在这场风波中“光荣毕业”了&#xff0c;前段时间找我出去小聚&#xff0c;聊起了这事儿&#xff1a; “比起惆怅&#xff0c;我更多的是感到…

04-Golang的一些基本变量

Golang的一些基本变量变量介绍概念变量使用注意事项变量的使用的基本步骤程序中 号的使用变量介绍 概念 变量相当于内存中一个数据存储空间的表示&#xff0c;你可以把变量看作是一个个房间的门牌号&#xff0c;通过门牌号我们可以找到房间&#xff0c;同样的道理&#xff0c…

Mycat(1):Mycat简介

1、什么是MyCat MyCat是目前最流行的分布式数据库中间插件&#xff0c;是一个开源的分布式数据库系统&#xff0c;是一个实现了MySQL协议的服务器&#xff0c;前端用户可以把它看作是一个数据库代理&#xff0c;用MySQL客户端工具和命令行访问&#xff0c;而其后端可以用MySQL…

ODN 2395丨艾美捷CpG ODN系列参数介绍

艾美捷CpG ODN系列——ODN 2006&#xff1a;具有硫代磷酸酯骨架的CpG寡脱氧核苷酸&#xff08;C型&#xff09;。人和小鼠TLR9&#xff08;Toll样受体9&#xff09;的特异性配体。 艾美捷CpG ODN 丨ODN 2395化学性质&#xff1a; 序列&#xff1a;5-tcgtcgtttttcggcgcgcgccgcg…

基于java+springmvc+mybatis+vue+mysql的班级事务管理系统

项目介绍 学校教务管理信息化是提高办公效率的主要途径&#xff0c;随着我国高等教育的快速发展&#xff0c;学校办学规模的不断扩大&#xff0c;在校学生人数不断增多&#xff0c;办学层次出现多元化&#xff0c;由一地办学发展到多地多点办学&#xff0c;同时进一步推行学分…

一文弄懂Java中线程池原理

在工作中&#xff0c;我们经常使用线程池&#xff0c;但是你真的了解线程池的原理吗&#xff1f;同时&#xff0c;线程池工作原理和底层实现原理也是面试经常问的考题&#xff0c;所以&#xff0c;今天我们一起聊聊线程池的原理吧。 为什么要用线程池 使用线程池主要有以下三…

44 有效括号序列 45滑动窗口的最大值

44 有效括号序列 很容易想到用栈&#xff0c;但是一开始还是写得有问题 import java.util.*;public class Solution {/*** * param s string字符串 * return bool布尔型*/public boolean isValid (String s) {// write code hereStack<Character> st new Stack<>…

详解 InnoDB ReplicaSet

详解 InnoDB ReplicaSetInnoDB ReplicaSet 是什么&#xff1f;InnoDB ReplicaSet 的优缺点InnoDB ReplicaSet 的限制部署 InnoDB ReplicaSet1. 准备两个 MySQL 实例添加新实例的配置选项到 /etc/my.cnf分别在两台主机上进行预配置2. 使用 MySQL Shell 连接到一个实例来配置两个…

海康安防平台对接

1.前置准备工作 1.1下载h5播放器 https://open.hikvision.com/download/5c67f1e2f05948198c909700?type10安装包解压 1.2配置nginx反向代理 将解压的h5放到nginx目录下 配置nginx配置文件,修改如下两个配置 server {listen 9051;server_name localhost;#charset …

Python密码锁屏窗体界面

程序示例精选 Python密码锁屏窗体界面 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python密码锁屏窗体界面》编写代码&#xff0c; 原理上没有采用Windows自带锁屏模块&#xff0c;是通过软…

通过左旋和右旋来实现搜索二叉树的自平衡

首先左旋和右旋的概念都是在平衡二叉树的基础上提出的。并对AVL树 SB树 红黑树在原理层面进行了简单的介绍&#xff0c;无coding。 什么是左旋&#xff1f; 假设存在下述平衡二叉树&#xff08;某个结点的左子节点都小于该结点&#xff0c;右子结点右大于大结点&#xff09;&…

初识单链表/单链表头指针的创建

链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构。链表不像数组中的元素那样&#xff0c;每个数据的的地址是连续的。数组的物理存储结构&#xff1a;数组中上一个数据的地址和下一个数据的地址是连续的&#xff0c;正好差一个整型大小 链…

做副业找不到好项目?公众号依旧是最优选择

大家好&#xff0c;我是蝶衣王的小编&#xff0c;今天分享一下公众号还是否值得做呢 说到做自媒体账号赚钱&#xff0c;有些人可能会说是2022年谁看公众号&#xff0c;阅读量都不如以前了&#xff0c;大家都跑去刷短视频。其实不错&#xff0c;但是对于不想露脸的人来说&#…

深圳大学数学文化赏析MOOC第二次作业答案(满分)

一、单选题 (共 40.00 分) 1. 以下各数集中&#xff0c;不可数的一个是&#xff08; &#xff09; A. 自然数集 B. 整数集 C. 有理数集 D. 无理数集 满分&#xff1a;2.00 分 得分&#xff1a;2.00 分 你的答案&#xff1a; D 正确答案&#xff1a; D 教师评…

java计算机毕业设计ssm重点实验室系统

项目介绍 本重点实验室系统是针对目前仓库的实际需求,从实际工作出发,对过去的重点实验室系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构、概念、…

机器学习100天:目录

《机器学习100天》&#xff01;理论python&#xff01;实战真正的从零开始机器学习&#xff0c;循序渐进&#xff0c;适合初学者快速入门和进阶&#xff01; 思维导图&#xff1a; 第0章&#xff1a;准备工作 001 开发环境搭建 第1章&#xff1a;数据预处理 002 导入数据集 …

超级简单的vue课程设计电商购物系统,没有数据库文件,通过模拟数据操作

详细地址&#xff1a;《《《下载地址》》》 基于vue前端项目开发的电商购物系统&#xff0c;主要包括商品的列表、商品的详细页、加入购车、注册、用户登录用户等基本的功能。适合于课程设计&#xff0c;该项目的开发没有用到MYSQL数据库&#xff0c;通过模拟数据进行读取&…

转行如何自学Python并且找到工作,分享自己心得

我是25岁转行学python的。说实在&#xff0c;转行就是奔着挣钱去的。希望我的经历可以给想转行的朋友带来一点启发和借鉴。 先简单介绍下个人背景&#xff0c;三流大学毕业&#xff0c;电子商务专业&#xff0c;学习能力一般&#xff0c;没啥特别技能&#xff0c;反正就很普通…