乐鑫技术交流
直播中

tulin

13年用户 1267经验值
私信 关注
[问答]

如何将esp8266 nodemcu与dcs bios一起使用?

尝试将 esp8266 nodemcu 与 dcs bios 一起使用,我测试了 OLED,当我使用此代码时,它可以通过 U8g2 模板的图形测试正常工作,它可以在 mega 2560 上正常工作,但是当切换到 esp8266 时,它会给我一些奇怪的 OLED 人工制品
代码:#include
#include
#include
#include
//#define  DCSBIOS_IRQ_SERIAL // MEGA 2560
#define  DCSBIOS_DEFAULT_SERIAL // ESP8266node mcu
#include "DcsBios.h"

int count;
//U8G2_SH1122_256X64_F_4W_HW_SPI u8g2(U8G2_R2, /* cs=*/ 10, /* dc=*/ 5, /* reset=*/ 4); // Mega 2560 scl pin52, sda pin
U8G2_SH1122_256X64_F_4W_SW_SPI u8g2(U8G2_R2, /* clock=*/ 14, /* data=*/ 13, /* cs=*/ 15, /* dc=*/ 5, /* reset=*/ 4); // ESP 8266
String comDisplay[3];
void setup()
{
count = 0;
  u8g2.begin();
  Wire.begin();
  u8g2.clearDisplay();
  u8g2.clearBuffer();
  u8g2.sendBuffer();
  u8g2.setFont(Hornet_UFC);
  u8g2.setBusClock(850000);
  DcsBios::setup();

}
  

void updateComDisplay(int changed,char* newValue) {
comDisplay[changed] = cleanUpCom(newValue);

u8g2.clearBuffer();          // clear the internal memory
u8g2.setCursor(0, 45);
u8g2.print(comDisplay[0]);
u8g2.setCursor(57, 45);
u8g2.print(comDisplay[1]);
u8g2.setCursor(75, 45);
u8g2.print(comDisplay[2]);
u8g2.sendBuffer();
}


char* cleanUpCom(char* newValue) {
switch (newValue[0]) {
   case '`':
     newValue[0]='1';
     break;
   case '~':
     newValue[0]='2';
     break;
      
}
return newValue;  
}
void onUfcScratchpadNumberDisplayChange(char* newValue) {
    updateComDisplay(2, newValue);
}
DcsBios::StringBuffer<8> ufcScratchpadNumberDisplayBuffer(0x7446, onUfcScratchpadNumberDisplayChange);/// main

void onUfcScratchpadstring2DisplayChange(char* newValue) {
    updateComDisplay(1, newValue);
}
DcsBios::StringBuffer<2> ufcScratchpadString2DisplayBuffer(0x7450, onUfcScratchpadString2DisplayChange);///mid

void onUfcScratchpadString1DisplayChange(char* newValue) {
    updateComDisplay(0, newValue);
}
DcsBios::StringBuffer<2> ufcScratchpadString1DisplayBuffer(0x744e, onUfcScratchpadString1DisplayChange);///left
  //// updateComDisplay(2, newValue);
void loop()
{
  DcsBios::loop();
}

ESP8266 glitch
Mega correct display
im quite noob with arduino 所以也许有人可以查明问题谢谢

               


                     

回帖(1)

成尔秩

2024-1-4 14:43:39
在将 esp8266 nodemcu 与 dcs bios 一起使用时,您需要确保您的引脚定义和串口设置正确,并且您的 DcsBios 库已正确安装。

在 OLEd 的情况下,您需要确保您的 OLED 屏幕兼容 ESP8266 nodemcu,并且您的代码可以通过正确的引脚访问它。如果您收到奇怪的 OLED 人工制品代码,那么您需要检查您的 OLED 屏幕是否被正确连接并且代码是否正确访问它。

下面是一个示例代码,用于在 ESP8266 nodemcu 上将 OLED 屏幕与 dcs bios 一起使用:

#include
#include
#include
#include "DcsBios.h"

#define OLED_RESET 0
Adafruit_SSD1306 display(OLED_RESET);

void setup() {
  Serial.begin(115200);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  dcsbios_setup(); // 初始化 DcsBios 库
}

void loop() {
  dcsbios_loop(); // 处理 DcsBios 消息
  
  display.clearDisplay(); // 清空 OLED 屏幕
  display.setCursor(0,0); // 设置光标
  display.print("Hello DcsBios!"); // 打印消息
  display.display(); // 刷新 OLED 屏幕
}

在此示例中,我们使用 Adafruit_SSD1306 库与 OLED 屏幕进行交互,并在 OLED 屏幕上打印消息。我们还使用了 DcsBios 库来处理 DcsBios 消息,以便与外部硬件进行通信。请注意,我们使用了 dcsbios_setup() 和 dcsbios_loop() 函数,以确保正确处理 DcsBios 消息。

请根据您的硬件和库版本适当修改此代码,并确保正确设置您的引脚和串口设置。如果您遇到任何问题,请检查您的硬件连接和代码,并查看您使用的库的文档以获取更多帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分