您的位置:首页 > Web前端 > Node.js

esp8266-01s 烧录nodemcu固件的开发(自用记录)

2020-02-01 12:36 1176 查看

esp8266-01s

开发esp8266
本文章并没有什么深刻的分析,就是按着小白的思维直白的做,按着这个步骤肯定可以做出来的。我做的什么呢?众所周知,esp8266-01s,是极其的小的,所以我就打算用这个小WiFi模块当作单片机用,驱动oled屏,做成一个可配带的显示屏。到底是什么呢?—低配加特殊用处手环!
首先是烧录固件,esp8266默认的是at固件,不能当单片机使用。要烧录另一种固件。固件有好多中,我用的是这个,需要在这个网站里面自己配置相关的函数,需要什么库你就勾选什么库,我这个就需要file, gpio, i2c, net, node, pwm, tmr, u8g2, uart, wifi.这些。输入你的邮箱(QQ邮箱不可以)点击生成就可以收到一个邮件了,我收到的是下面的。其中float和integer,就是固件的下载地址,这两个烧哪个都行。
Your NodeMCU custom build finished successfully. You may now download the firmware:

This was built against the master branch and includes the following modules: file, gpio, i2c, net, node, pwm, tmr, u8g2, uart, wifi.
The files are guaranteed to be available for download for 24h.

*** NEW FLASHING TOOL *** NEW FLASHING TOOL *** NEW FLASHING TOOL ***
I invite you to try the new GUI tool https://github.com/marcelstoer/nodemcu-pyflasher //在这个网站自己配置固件的功能

Learn how to flash the firmware: https://nodemcu.readthedocs.io/en/master/en/flash/.
If you’re upgrading from a previous version you should carefully study the “Upgrading Firmware” instructions on that page.

Please help keep this service alive: http://nodemcu-build.com/faq.php#support
因该是烧哪个固件都可以

链接: [http://nodemcu-build.com/faq.php#support(https://mp.csdn.net).这个连接是上面所说的那个网站

引脚一定要注意,他有一个下载模式和运行模式,由gpio0号引脚决定,具体是如何,自行搜索,
固件搞到手之后,怎末烧到esp8266里面呢?这就需要烧录软件了,这个烧录软件可以到安信可或者哪里下载,其名字是:
flash_download_tools_v3.6.2.2_1.zip,你下载就好了,具体如何用好多大神都有介绍,点击添加搞到的固件,选好频率,什么的,下载就好了,烧不成就多试试。完成之后就可以往里烧应用程序了,然而这个用什么环境呢?其实官方有官配的环境,但是说实话我没搞懂,所以我用,ardunio的环境搞的程序。
那么ardunio要怎末搞呢?
同样其它的大神有说明,说的决定比我详细,就搜索ardunio环境开发esp8266即可。其实就是在ardunioIDE中下载相关的库文件。
完成后,编写程序就好了。

#include <Wire.h>
#include "OLED.h"
static const char logo[] PROGMEM={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0x03,0x00,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xf8,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xe0,0xff,0x03,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x1f,0x1c,0xf0,0x1f,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x0f,0x00,0x80,0x7f,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xff,0x01,0x00,0xfc,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x07,0x00,0x00,0xfe,0x03,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xfc,0x07,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x01,0x00,0x00,0xf8,0x0f,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x00,0x00,0x00,0xf0,0x1f,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x3f,0x00,0x00,0x00,0xf0,0x1f,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xf0,0x1f,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x1f,0x00,0x00,0x00,0xf0,0x1f,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x0f,0x00,0x00,0x00,0xf0,0x3f,0x00,0xf0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xf0,0x1f,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x07,0x00,0x00,0x00,0xf0,0x0f,0x00,0xf8,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x03,0x00,0x00,0x00,0xf8,0x03,0x00,0xfc,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x01,0x00,0x00,0x00,0xfc,0x00,0x00,0x7e,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x7f,0x00,0x00,0x7f,0xf8,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x00,0x00,0x00,0x80,0x1f,0x00,0x80,0x7f,0xf8,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x00,0x00,0x00,0xe0,0x07,0x00,0xc0,0x3f,0xf0,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x00,0x00,0x00,0xf8,0x01,0x00,0xe0,0x3f,0xf0,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x00,0x00,0x7f,0x00,0x00,0xf8,0x3f,0xf0,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x00,0xe0,0x1f,0x00,0x00,0xfe,0x0f,0xf0,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x00,0xf8,0x03,0x00,0x80,0xff,0x0f,0xf8,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x00,0x7e,0x00,0x00,0xe0,0xff,0x01,0xf0,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x00,0x1f,0x00,0x00,0xf8,0xff,0x00,0xf8,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0xc0,0x0f,0x00,0x00,0xfe,0x7f,0x00,0xfc,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0xe0,0x03,0x00,0x80,0xff,0x1f,0x00,0xfe,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0xf8,0x01,0x00,0xe0,0xff,0x07,0x00,0xfe,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x7c,0x00,0x00,0xfc,0xff,0x00,0x00,0xfc,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x3e,0x00,0x00,0xff,0x07,0x00,0x00,0xfc,0xff,0xff,0xff,0x7f,
0xff,0xff,0x7f,0x00,0x0f,0x00,0xc0,0xff,0x07,0x00,0x00,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x80,0x07,0x00,0xf0,0xff,0xff,0x0f,0xc0,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xc0,0x03,0x00,0xf8,0xff,0xff,0x3f,0xf8,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xc0,0x01,0x00,0xfe,0xf8,0xc7,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xe1,0x01,0x00,0x7f,0xc0,0x03,0x87,0x00,0xfe,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xe1,0x00,0xc0,0x7f,0x80,0x01,0x86,0x00,0xfe,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x63,0x00,0xe0,0x7f,0x80,0x01,0x86,0x00,0xfe,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x63,0x00,0xe0,0x7f,0x8c,0x31,0x86,0xc3,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x67,0x00,0xc0,0x7f,0x8c,0x31,0x86,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x6f,0x00,0xc0,0x7f,0x8c,0x31,0x86,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x7f,0x00,0xc0,0x7f,0x8c,0x31,0x86,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0x7f,0x00,0xc0,0x7f,0x8c,0x31,0x86,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x00,0x80,0x7f,0x80,0x01,0x86,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x01,0x00,0x7f,0x80,0x01,0x86,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x03,0x00,0x7c,0xc0,0x03,0x87,0x83,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x07,0x00,0xf8,0xff,0xff,0xf1,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x0f,0x00,0xe0,0xff,0x7f,0xf0,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x3f,0x00,0x00,0xfe,0x07,0xfc,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0x03,0x00,0x00,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0x0f,0x00,0x00,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f
};

//GPIO4(SDA) GPIO5(SCL)
OLED display(0, 2);//这里0和2,意思是esp8266-01s上的GPIO0和GPIO2号引脚

void setup() {
//初始化oled
display.begin();

//测试显示信息
display.print("Hello ESP8266");
Wire.write(0x40);//data mod
Wire.write("aaaaaa");
display.print("From OLED example",2,0);
delay(3*1000);

// 测试清除
display.clear();

/*for(int i=0; i<50; i++){
Wire.beginTransmission(0x3C); // begin transmitting
Wire.write(0x40);//data mode
Wire.write(logo[i]);
Wire.endTransmission();
}*/

}
int i=0;
char *s;//=danci;
char *w;//=danci;
void loop() {
/*for(int i=0; i<1; i++){
for(int j=0;j<256;j++){
Wire.beginTransmission(0x3C); // begin transmitting
Wire.write(0x40);//data mode
Wire.write(unit3[i][j]);
Wire.endTransmission();
}
}*/

if(i==220)i=0;
w=danci[i];
s=danci[i+1];
display.print(w);
display.print(s,2,0);//display.print("pai lian",2,0);
delay(10000);
delay(1000);
display.clear();
i++;
}

这是头文件
#include <Wire.h>
#include “OLED.h”

//==========================================================//

// Small 8x8 font,这个是给你定义好的26个字母和阿拉伯数字
static const char myFont[][8] PROGMEM = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00},
{0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00},
{0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00},
{0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00},
{0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00},
{0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00},
{0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00},
{0x00,0x41,0x22,0x1C,0x00,0x00,0x00,0x00},
{0x00,0x08,0x2A,0x1C,0x2A,0x08,0x00,0x00},
{0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00},
{0x00,0xA0,0x60,0x00,0x00,0x00,0x00,0x00},
{0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00},
{0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00},
{0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00},
{0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00},
{0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00},
{0x00,0x62,0x51,0x49,0x49,0x46,0x00,0x00},
{0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x00},
{0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00},
{0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00},
{0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00},
{0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00},
{0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00},
{0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00},
{0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00},
{0x00,0x00,0xAC,0x6C,0x00,0x00,0x00,0x00},
{0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00},
{0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00},
{0x00,0x41,0x22,0x14,0x08,0x00,0x00,0x00},
{0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00},
{0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00},
{0x00,0x7E,0x09,0x09,0x09,0x7E,0x00,0x00},
{0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00},
{0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00},
{0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00},
{0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00},
{0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00},
{0x00,0x3E,0x41,0x41,0x51,0x72,0x00,0x00},
{0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00},
{0x00,0x41,0x7F,0x41,0x00,0x00,0x00,0x00},
{0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00},
{0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00},
{0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00},
{0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00},
{0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00},
{0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00},
{0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00},
{0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00},
{0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00},
{0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00},
{0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00},
{0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00},
{0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00},
{0x00,0x3F,0x40,0x38,0x40,0x3F,0x00,0x00},
{0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00},
{0x00,0x03,0x04,0x78,0x04,0x03,0x00,0x00},
{0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00},
{0x00,0x7F,0x41,0x41,0x00,0x00,0x00,0x00},
{0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00},
{0x00,0x41,0x41,0x7F,0x00,0x00,0x00,0x00},
{0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00},
{0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00},
{0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00},
{0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00},
{0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00},
{0x00,0x38,0x44,0x44,0x28,0x00,0x00,0x00},
{0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00},
{0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00},
{0x00,0x08,0x7E,0x09,0x02,0x00,0x00,0x00},
{0x00,0x18,0xA4,0xA4,0xA4,0x7C,0x00,0x00},
{0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00},
{0x00,0x00,0x7D,0x00,0x00,0x00,0x00,0x00},
{0x00,0x80,0x84,0x7D,0x00,0x00,0x00,0x00},
{0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x00},
{0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00},
{0x00,0x7C,0x04,0x18,0x04,0x78,0x00,0x00},
{0x00,0x7C,0x08,0x04,0x7C,0x00,0x00,0x00},
{0x00,0x38,0x44,0x44,0x38,0x00,0x00,0x00},
{0x00,0xFC,0x24,0x24,0x18,0x00,0x00,0x00},
{0x00,0x18,0x24,0x24,0xFC,0x00,0x00,0x00},
{0x00,0x00,0x7C,0x08,0x04,0x00,0x00,0x00},
{0x00,0x48,0x54,0x54,0x24,0x00,0x00,0x00},
{0x00,0x04,0x7F,0x44,0x00,0x00,0x00,0x00},
{0x00,0x3C,0x40,0x40,0x7C,0x00,0x00,0x00},
{0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00},
{0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00},
{0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00},
{0x00,0x1C,0xA0,0xA0,0x7C,0x00,0x00,0x00},
{0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00},
{0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x00},
{0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00},
{0x00,0x41,0x36,0x08,0x00,0x00,0x00,0x00},
{0x00,0x02,0x01,0x01,0x02,0x01,0x00,0x00},
{0x00,0x02,0x05,0x05,0x02,0x00,0x00,0x00}
};

//==========================================================//
// Resets display depending on the actual mode.
void OLED::reset_display(void)
{
displayOff();
clear_display();
displayOn();
}

//==========================================================//
// Turns display on.
void OLED::displayOn(void)
{
sendcommand(0xaf); //display on
}

//==========================================================//
// Turns display off.
void OLED::displayOff(void)
{
sendcommand(0xae); //display off
}

//==========================================================//
// Clears the display by sendind 0 to all the screen map.
void OLED::clear_display(void)
{
unsigned char i,k;
for(k=0;k<8;k++)
{
setXY(k,0);
{
for(i=0;i<(128 + 2 * _offset);i++) //locate all COL
{
SendChar(0); //clear all COL
//delay(10);
}
}
}
}

//==========================================================//
// Actually this sends a byte, not a char to draw in the display.
// Display’s chars uses 8 byte font the small ones and 96 bytes
// for the big number font.
void OLED::SendChar(unsigned char data)
{
//if (interrupt && !doing_menu) return; // Stop printing only if interrupt is call but not in button functions

Wire.beginTransmission(_address); // begin transmitting
Wire.write(0x40);//data mode
Wire.write(data);
Wire.endTransmission(); // stop transmitting
}

//==========================================================//
// Prints a display char (not just a byte) in coordinates X Y,
// being multiples of 8. This means we have 16 COLS (0-15)
// and 8 ROWS (0-7).
void OLED::sendCharXY(unsigned char data, int X, int Y)
{
setXY(X, Y);
Wire.beginTransmission(_address); // begin transmitting
Wire.write(0x40);//data mode

for(int i=0;i<8;i++)
Wire.write(pgm_read_byte(myFont[data-0x20]+i));

Wire.endTransmission(); // stop transmitting
}

//==========================================================//
// Used to send commands to the display.
void OLED::sendcommand(unsigned char com)
{
Wire.beginTransmission(_address); //begin transmitting
Wire.write(0x80); //command mode
Wire.write(com);
Wire.endTransmission(); // stop transmitting
}

//==========================================================//
// Set the cursor position in a 16 COL * 8 ROW map.
void OLED::setXY(unsigned char row,unsigned char col)
{
sendcommand(0xb0+row); //set page address
sendcommand(_offset+(8col&0x0f)); //set low col address
sendcommand(0x10+((8col>>4)&0x0f)); //set high col address
}

//==========================================================//
// Prints a string regardless the cursor position.
void OLED::sendStr(unsigned char *string)
{
unsigned char i=0;
while(*string)
{
for(i=0;i<8;i++)
{
SendChar(pgm_read_byte(myFont[*string-0x20]+i));
}
*string++;
}
}

//==========================================================//
// Prints a string in coordinates X Y, being multiples of 8.
// This means we have 16 COLS (0-15) and 8 ROWS (0-7).
void OLED::sendStrXY( const char *string, int X, int Y)
{
setXY(X,Y);
unsigned char i=0;
while(*string)
{
for(i=0;i<8;i++)
{
SendChar(pgm_read_byte(myFont[*string-0x20]+i));
}
*string++;
}
}

//==========================================================//
// Inits oled and draws logo at startup
void OLED::init_OLED(void)
{

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

  • @file OLED init
  • @author zero Team
  • @version V1.0
  • @date 13-March-2019
  • @brief 初始化OLED显示屏幕
    ******************************************************************************/

delay(500);//初始化之前的延时 important
//初始化指令 由厂商给定
sendcommand(0xAE);//display off
sendcommand(0xD5);//set memory addressing Mode
sendcommand(0X80);//分频因子
sendcommand(0xA8);//设置驱动路数
sendcommand(0x1F);//默认0X3f(1/64) 0x1f(1/32)
sendcommand(0xD3); //设置显示偏移
sendcommand(0x00);//默认值00

sendcommand(0x40);//设置开始行 【5:0】,行数

sendcommand(0x8D);//电荷泵设置
sendcommand(0x14);//bit2,开启/关闭 0x14

sendcommand(0x20);//设置内存地址模式
sendcommand(0x02);//[[1:0],00,列地址模式;01,行地址模式;10,页地址模式;默认10;
sendcommand(0xA1);//段重定义设置,bit0:0,0->0;1,0->127;
sendcommand(0xC8);//设置COM扫描方向

sendcommand(0xDA);//设置COM硬件引脚配置
//////////////////////////////****************注意
sendcommand(0x02);//0.91英寸12832分辨率,因为我用的oled屏是0.91的所以是0x02,但是这样用取模软件取的码不能显示,只能用上面那个定义好的码。
/////////////////////////////////////////////////////

sendcommand(0x81);//对比度设置 0x81
sendcommand(0x01);//1~255(亮度设置,越大越亮)

sendcommand(0xD9);//设置预充电周期
sendcommand(0xf1);//[3:0],PHASE 1;[7:4],PHASE 2;
sendcommand(0xDB);//设置VCOMH 电压倍率
sendcommand(0x40);//[6:4] 000,0.65vcc;001,0.77vcc;011,0.83*vcc;

sendcommand(0xA4);//全局显示开启;bit0:1,开启;0,关闭;(白屏/黑屏)
sendcommand(0xA6);//设置显示方式;bit0:1,反相显示;0,正常显示

sendcommand(0x2E);//停用滚动条

sendcommand(0xAF);//开启显示
delay(100);//延时一段时间
clear();//清除显示屏幕,防止屏幕中存在噪点

//////////////////////////////////*************************用下面的初始化函数则可以显示用取模软件取的码也可以显示上面定义好的码,但是适用于0.96寸屏
/ sendcommand(0xae); //display off
sendcommand(0xa6); //Set Normal Display (default)
// Adafruit Init sequence for 128x64 OLED module
sendcommand(0xAE); //DISPLAYOFF
sendcommand(0xD5); //SETDISPLAYCLOCKDIV
sendcommand(0x80); // the suggested ratio 0x80
sendcommand(0xA8); //SSD1306_SETMULTIPLEX
sendcommand(0x3F);
sendcommand(0xD3); //SETDISPLAYOFFSET
sendcommand(0x0); //no offset
sendcommand(0x40 | 0x0); //SETSTARTLINE
sendcommand(0x8D); //CHARGEPUMP
sendcommand(0x14);
sendcommand(0x20); //MEMORYMODE
sendcommand(0x00); //0x0 act like ks0108

//sendcommand(0xA0 | 0x1);      //SEGREMAP   //Rotate screen 180 deg
sendcommand(0xA0);

//sendcommand(0xC8);            //COMSCANDEC  Rotate screen 180 Deg
sendcommand(0xC0);

sendcommand(0xDA);            //0xDA
sendcommand(0x12);           //COMSCANDEC
sendcommand(0x81);           //SETCONTRAS
sendcommand(0xCF);           //
sendcommand(0xd9);          //SETPRECHARGE
sendcommand(0xF1);
sendcommand(0xDB);        //SETVCOMDETECT
sendcommand(0x40);
sendcommand(0xA4);        //DISPLAYALLON_RESUME
sendcommand(0xA6);        //NORMALDISPLAY

clear_display();
sendcommand(0x2e); // stop scroll
//----------------------------REVERSE comments----------------------------//
sendcommand(0xa0); //seg re-map 0->127(default)
sendcommand(0xa1); //seg re-map 127->0
sendcommand(0xc8);
delay(1000);
//----------------------------REVERSE comments----------------------------//
// sendcommand(0xa7); //Set Inverse Display
// sendcommand(0xae); //display off
sendcommand(0x20); //Set Memory Addressing Mode
sendcommand(0x00); //Set Memory Addressing Mode ab Horizontal addressing mode
//sendcommand(0x10); // Set Memory Addressing Mode ab Page addressing mode(RESET)
*/
}

//==========================================================//

OLED::OLED(uint8_t sda, uint8_t scl, uint8_t address, uint8_t offset) {
_sda = sda;
_scl = scl;
_address = address;
_offset = offset;
}

void OLED::begin(void) {
// set up i2c
Wire.begin(_sda, _scl);
init_OLED();
reset_display();
}

void OLED::on(void) {
DEBUG_PRINTLN(“on”);
displayOn();
}

void OLED::off(void) {
DEBUG_PRINTLN(“off”);
displayOff();
}

void OLED::clear(void) {
DEBUG_PRINTLN(“clear”);
clear_display();
}

void OLED::print(char *s, uint8_t r, uint8_t c) {
DEBUG_PRINT(“print “);
DEBUG_PRINT®;
DEBUG_PRINT(”,”);
DEBUG_PRINT©;
DEBUG_PRINT(" ");
DEBUG_PRINTLN(s);
sendStrXY(s, r, c);
}

头文件
#ifndef OLED_H
#define OLED_H

#if ARDUINO >= 100
#include “Arduino.h”
#else
#include “WProgram.h”
#endif

// Uncomment to enable printing out nice debug messages.
//#define OLED_DEBUG

// Define where debug output will be printed.
#define DEBUG_PRINTER Serial

// Setup debug printing macros.
#ifdef OLED_DEBUG
#define DEBUG_PRINT(…) { DEBUG_PRINTER.print(VA_ARGS); }
#define DEBUG_PRINTLN(…) { DEBUG_PRINTER.println(VA_ARGS); }
#else
#define DEBUG_PRINT(…) {}
#define DEBUG_PRINTLN(…) {}
#endif

class OLED {
public:
OLED(uint8_t sda, uint8_t scl, uint8_t address=0x3c, uint8_t offset=0);
void begin(void);
void on(void);
void off(void);
void clear(void);
void print(char *s, uint8_t r=0, uint8_t c=0);

private:
uint8_t _sda, _scl, _address, _offset;
void reset_display(void);
void displayOn(void);
void displayOff(void);
void clear_display(void);
void SendChar(unsigned char data);
void sendCharXY(unsigned char data, int X, int Y);
void sendcommand(unsigned char com);
void setXY(unsigned char row,unsigned char col);
void sendStr(unsigned char *string);
void sendStrXY( const char *string, int X, int Y);
void init_OLED(void);

};

#endif

都弄好之后有一个问题就是太耗电,我也不知道为啥可能是电路的原因,也可能就是耗电。
这就是我做的整个过程,有小白可以参考下

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
卑微的电子 发布了1 篇原创文章 · 获赞 1 · 访问量 366 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: