• arduino 记录


    U8g2 用于arduino或stm32上驱动OLED显示屏

    Arduion

    U8G2简要说明

    u8g2显示分为全页显示与分页显示和U8X8的无ram显示

    全页显示需要单片机提供1024字节的ram,分页显示分为需要256字节和125字节的ram

    分页显示在绘制图片时将屏幕分成几部份,每次绘制一分部

    U8X8不需要ram,但不可画图,只能显示文字

    全页使用 clearbuff senddbuff

    分页使用 U8G2.fisrt Page  while(u8g2.next page)

             参考arduino u8g2示列

    接口方式分为spi和IIC ,8080,8060控制方式

    SPI 可以分为硬件SPI和软件SPI

    IIC可以分为硬件IIC 和软件IIC

    速度对比:8080 8060 >硬件SPI >l软件SPI>硬件IIC>软件IIC

    IO口占用量  8080 8060 >SPI >IIC

    U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);

    //U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6); // Arduboy (Production, Kickstarter Edition)

    //U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

    //U8G2_SSD1306_128X64_ALT0_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);   //

    4W 4WIRE 4线

    NONAME 全页显示

    HW HARDWARE 硬件 HW_SPI硬件SPI

    SW SOFTWARE 软件 SW_SPI 软件SPI

    u8g2 firstpage sendbuffer区别

    。/ U8G2/PAGEBUFF/DRAW LOGO 

    U8g2lib Example Overview:

        Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption

        Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.

        U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.

    arduino 因只有2K的RAM,如果程序占用RAM可以使用PAGEBUFF模式

    U8G2因使用的显存的不同,显示分为分页显示与整页显示

    当使用1024时,可以整页显示 sendbuffer clearbuff

    使用分页显示时 有128 256字节内存,但一次只能画一部份,从而需要多次画 使用FIRSTPAGE/NEXTPAGE 

    U8X8模式下则不使用RAM

    u8g2.clearnbuffer();

    //do somthing

    u8g2.sendBuffer();

    当使用256 128时,一页显示不完,多次调用

    u8g2.firstPage();

    do{

    //do somthing

    }while(u8g2.next());

    1024 256 128 内存

    不够的话分页显示 也就是firstpage

    速度有点降

    够的话用 sendbuff

    u8g2

    源代码地址: https://github.com/olikraus/u8g2

    PNG转字库软件地址 https://github.com/olikraus/u8g2/tree/master/tools/font/png2bdf

    字库制作 使用u8g2自带的工具,将图片转为字体文件,可以压缩图片的数据,减少空间占用

    使用说明:

    test\目录下 do_track.sh

    rm track_font.png

    ../png2bdf -f track -o track.bdf -e 65 *.png

    ../../bdfconv/bdfconv -f 1 -b 0 -m '65-97' -v track.bdf -n track_font -o track_font.c -d ../../bdf/helvB24.bdf -g 4

    convert bdf.tga track_font.png

    rm bdf.tga

    提供的字体类型  \u8g2-master\doc\u8g2fntlistall.pdf

    帮助:https://github.com/olikraus/u8g2/wiki

    玩转u8g2 OLED库,一篇就够——基于SMT32、HAL

    https://blog.csdn.net/qq_51096702/article/details/130257230

    adafruit-gfx 显示器库,提供统一的对多种显示器的统一操作

    字体显示 ,绘图

    TFT-ESPI 设置显示模式

    arduino u8g2 表情字库制作

     U8G2 下载原代码 : GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2

    1.制作图片

    说明: https://img-blog.csdnimg.cn/c5a35c95891f42c691a230c2c9d7fbac.png

    ​编辑

    使用FLASH 或任何可以画图的软件制作动态图片PNG格式

    大小最好先设定好如40x80 ,最好不要太大 128X64,60X60

    将制作好的图片放入 下载好的 u8g2-master\u8g2-master\tools\font\png2bdf\tst\目录下

    (新建tst文件夹)

    2.将图片变成字体

    打开下载的U8G2源文件 找到u8g2-master\u8g2-master\tools\font\png2bdf

    使用cmd命令 进入u8g2-master\u8g2-master\tools\font\png2bdf 或是 创建bat文件,添加下面语语

    png2bdf -o tst\myfont.bdf -f myfont -e 65  tst\*.png  //将tst文件夹下所有Png文件 转换成bdf字体格式 编号(-e) 从65 开始 glyph中使用(示列来自U8G2源代码中的示列文件 )

    运行上面代码将生成myfont.bdf文件

    (白底 使用 -i 选项 翻转颜色)png2bdf -o tst\myfonti.bdf -f myfont -e 65 -i tst\*.png

    3.将bdf文件生成 字体文件

    进入u8g2-master\u8g2-master\tools\font\bdpconv下

    使用使用cmd命令 进入u8g2-master\u8g2-master\tools\font\bdpconv

                          或在目录下  创建bat文件,添加下面语语,使用bdp生成c

               bdfconv.exe -v -f 1 -m "64-511" myfont.bdf -o myfont.c -n myfont -d myfont.bdf
    type myfont.c   //将myfont.bdf转换成 myfont.c  字体名(-n) myfont  描述信息(-d) myfont.bdf

    编码号 从 64-511 glyph中使用

    myfont.c中添加声明 “u8g2.h",复制到 Arduino\libraries\U8g2\src\clib 下

    打开arduino 示列 u8g2 ->weather或是其它 

    添加

    extern uint8_t myfont1[]; //表情字体

    void emo_tst(void)

    {

    //emo 字体

        u8g2.setFont(myfont1);

        u8g2.setColorIndex(draw_color);

     int k = 0;

      for(int i = 0;i<66;i++)

      {

        k = k+1;

        u8g2.clearBuffer();

        u8g2.drawGlyph(34,60,65+k%8); //使用%循环播放 8为图片的数量,65为png bdf生成时设置的值

        //u8g2.drawGlyphX2(0,0,65+k%8);

        u8g2.sendBuffer();

        delay(100);

      }

    }

    ****png 位深须为1 : 处理方法  保存为单色位图  bmp ,后再保存为png 

    png2bdf 命令 -o 输出文件 名 -f 字体名称  tst\*.png 文件tst下所有png文件 -e 编码号开始  即显示时的第一个编码号设置 glyph显示时 65

    bdfconv.exe 命令 

    .c文件中添加 #include"u8g2.h" 否则错误

    错误

    表情字体显示错误

    删除错误的图片重新编辑 

    MP4转GIF python代码

    import os

    import imageio

    def mp42gif(file_name):

        rd = imageio.get_reader(file_name)

        wt = imageio.get_writer('1.gif',mode="I",size=(80,40))

        for frame in rd:

            wt.append_data(frame)

       

        wt.close();

    mp42gif(args[1])

    GIF转PNG代码

    import os

    import sys

    from PIL import Image

    from PIL import ImageSequence

    from pathlib import Path

    def gif2png(file_name):

        image_name = 'gif'

        i = 0;

        with Image.open(file_name) as im:

            for i,frame in enumerate(ImageSequence.Iterator(im)):

                if(i % 5 == 0):

                    pt = Path(file_name).stem

                    frame = frame.convert('1')

                    frame.save(r".\tst\%s%02d.png"%(pt,i))

               

                i = i+1;

    if(__name__ == "__main__"):

        u = 0

       

        for i in (sys.argv):

            if(u >0):

                gif2png(i)

                print(i)

            u = u+1

           

        input('ab')

       

    VSCODE

    添加库

    移植U8G2

    ESP32

    开发板选择 ESP32 dev module 

    ​编辑

    esp投屏 拔掉重插

    spi uart iic usb can

    差别

    同步时钟,由主机控制通信频率

    spi SCLK MOSI MISO SS

    IIC SCL SDA

    速度spi

    IIC  SDA SCL 上拉4.7K电阻,

    UART 异步,约定通讯频率

    USB

    CAN

    差分通信,速度,稳定性

    PYTHON

    Serial 串口

    官方文档 pySerial API — pySerial 3.4 documentation

    安装

    先卸载serial

    python 安装 pip install pyserial

    import serial

    import time

    sr = serial.Serial("COM5",9600,timeout = 0.1)

    time.sleep(3) #重要的事说三遍 延时 延时 延时等待初始化完成

    sr.set_buffer_size(2,2) #上面不延时,此处设置无效

    python3.6 如果装了serial很可能会遇到 AttributeError: module 'serial' has no attribute 'Serial' 这时候你要先卸载serial,在安装pyserial。

    增加等待函数,否则

    Input函数

    input 阻塞 sys.stdin.readline()

    串口通信 pyserial

    问题 卸载

    delay sleep 否则错误

    https://www.cnblogs.com/liuxuanhe/articles/9112185.html python遇到的坑

    python3.6 如果装了serial很可能会遇到 AttributeError: module 'serial' has no attribute 'Serial' 这时候你要先卸载serial,在安装pyserial。

    Python应用开发——串口通信  Python应用开发——串口通信

    不要使用 try 错误找不到

    serial 御载 serial 安装 pyserial

    文件名不要叫serial

    VSCODE

    vscode

    ARUDINO exe的目录,否则错误

    ARDUINO NANO A4,A5脚问题

    STM32默认HARDWARE问题

    STM32使用Arduino时指定串口的方法_arduino stm32 多串口-CSDN博客

    拖地僧_国产MCU,stm32,ardunio-CSDN博客

    软件SPI IIC WIRE HARDWIRE

    stm32 arduino 使用

    Ardruino IDE 

    下载程序 

    配件 usb转ttl ,stm32f103xx 板

    使用 PA9 PA10 端口

    PA9接 RX ,PA10接 TX ,3.3接 STM32板子的3.3V(面包板上发现5V更稳定,有时3.3无法上传),GND接GND

    usb 转ttl  TX->PA10 RX ->PA9 GND->GND 3.3V ->3.3V 

    python print("%d %d", %(1,2))

    arduino 串口 不要回车

    arduino

    analogWrite 使用PWM

    analogRead 使用DAC 两者不同

    ANALOGWRITE 3,6,9,11,5,10 可使用PWM 其它引脚使用ANALOGWRITE不输出内容

     在Arduino GPIO

    D0–D7是PD寄存器,

    D8–D13是PB寄存器,

    A0–A5+RESET是PC寄存器

    每一个寄存器共8位,编号分别为0-7。

    2.寄存器操作
    DDRx ---------控制输出方向; //设定寄存器引脚输入输出模式(0:输入;1:输出)
    PORTx -控制输出数据0、1; //改变寄存器引脚电平状态
    PINx —控制(读取)输入数据; //读取寄存器引脚的电平状态


    //指令中的x表示的要使用的寄存器
    ————————————————
    版权声明:本文为CSDN博主「林逸壕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_51358997/article/details/128642996

    【Arduino学习】一、IO口操作_arduino 操作系统_林逸壕的博客-CSDN博客

    使用PA9 PA10 进行串口收发

    使用ST官方Arduino库,可在STM32全系列开发板上进行如下实验。

    注意:实例化串口对象需要加数字编号(Serialx中的x是串口编号,取值是1,2……):

    HardwareSerial Serialx(PA10, PA9);  //将Serialx(x=1-4)串口x的管脚,一定要带编号,如:Serial1
    强调一下:不能实例化默认的串口:HardwareSerial Serial(PA10, PA9)
    ————————————————
    版权声明:本文为CSDN博主「笑春风oO」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qcmyqcmy/article/details/128393652

    修改delay函数,模拟多线程操作,可以随时中断程序操作

    #include

    HardwareSerial Serial1(PA10,PA9);

    void setup() {

      Serial1.begin(115200);

     pinMode(PC13, OUTPUT);

     Serial1.println("hello");

    }

    // the loop function runs over and over again forever

    void loop() {

     Serial2.println("hello world");

     digitalWrite(PC13, HIGH);  // turn the LED on (HIGH is the voltage level)

     delay(100);       // wait for a second

     digitalWrite(PC13, LOW);  // turn the LED off by making the voltage LOW

     delay(100);       // wait for a second

     Serial1.println("hello world");

    }

    #include

    HardwareSerial Serial1(PA10,PA9);

    typedef unsigned int time_count;

    typedef unsigned int State;

    void setup() {

      // put your setup code here, to run once:

      Serial1.begin(115200);

      pinMode(PA2,OUTPUT);

      pinMode(PB6,OUTPUT);

      Serial1.println("hello");

    }

      time_count tc0 = 0;

      time_count tc1 = 0;

      time_count tc2 = 0;

      State state2 = 0;

      bool bl1 = 0;

      int data = 0;

    void loop() {

      // put your main code here, to run repeatedly:

      tc0 = tc0 +1;

      delay(1);

      //fly delay(20)

      if(tc0 % 20 == 0)

      {

        tc1 = tc1+1;

      }

      if(tc1 > 50 )

      {

       

        bl1 = !bl1;

        digitalWrite(PA2,bl1);

        digitalWrite(PB6,!bl1);

        tc1 = 0;

      }

      //breath  0->10 -> 0 silm 50  delay(100);

      if( tc0 % 100 == 0)  //wait delay 50

      {

        tc2 = tc2 +1;

      if(tc2 <= 10)

      {

        state2 = 0;

        data = data +1;

      }

      else if(tc2 < 20 )

      {

        state2 = 1;

        data = data -1;

      }

      else if(tc2 < 70 )

      {

        state2 = 3;

        data = 0;

      }

      else

      {

        state2 = 0;

        tc2 = 0;

      }

      Serial1.println(data);

      analogWrite(PA3,data);

      }

    }

    python 串口发送图片给arduino

    python 代码

    import serial

    import threading

    import time

    from PIL import Image

    from PIL import ImageSequence

    ##    im.show()

       

    ##print(img)

    ##

    ####img = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x07\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x07\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xc0\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\xf0\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x1f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x07\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xf8\x00\x00\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\xff\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00?\xff\xff\xff\xff\xff\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xff\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

    ##print("image len:",len(img))

    ##for i in range(len(img)):

    ##    img[i] = i

       

    ##print(img)

    sr = serial.Serial("COM5",9600,timeout = 0.1)

    ##sr.baudrate = 9600

    ##sr.bytesize = 8

    ##sr.parity = 'N'

    ##sr.stopbits = 1

    sr.set_buffer_size(2,2)

    time.sleep(3)

    def rec_thread():

        while(1):

            data = ''

            if(sr.inWaiting()>0):

                print("receive:<------",end = '')

                data = sr.read(sr.inWaiting())

                print(str(data))

                print("receive end//")

               

    if __name__ == "__main__":

        t1 = threading.Thread(target = rec_thread)

        t1.start()

        img = ''

        with Image.open(r"yh.gif") as im:

            for i,frame in enumerate(ImageSequence.Iterator(im)):

                frame = frame.resize((128,64),Image.ANTIALIAS)

                frame = frame.convert('1')

    ##            frame.show()

                img = frame.tobytes()

                sr.write(img)

                sr.flush()

    ##            time.sleep(0.1)

       

    ##    send_num = 1024

    ##

    ##    k = 0;

    ####    for i in range(int(len(img)/send_num)+1):

    ##    sr.write(img[k:k+send_num])

    ##    print("send---->:",img[k:k+send_num])

    ##    k = k + send_num

        time.sleep(0.1)

    ##        sr.flush()

           

    ##        print("s_hex:{} \n".format(  s_hex),end = '')

    ##        time.sleep(2)

        print("---------")

           

       

       

       

    arduino代码 

    #include

    #include

    #ifdef U8X8_HAVE_HW_SPI

    #include

    #endif

    #ifdef U8X8_HAVE_HW_I2C

    #include

    #endif

    U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/13, /* data=*/11, /* cs=*/10, /* dc=*/9, /* reset=*/8);

    unsigned char buff[1024];

    void setup(void) {

      Serial.begin(9600);

      u8g2.begin();

      // for(int i = 0;i<1024;i++)

      // buff[i] = 0xff;

        //u8g2.setBitmapMode(1);

        //u8g2.setFont(u8g2_font_ncenB14_tr);

    }

    int i = 0;

    void loop(void) {

      if(Serial.available()>0){

        buff[i] = Serial.read();

        i = i +1;

      }

      if(i >= 1023)

      {

        i = 0;

          u8g2.firstPage();

          do {

            u8g2.drawBitmap(0, 0, 16,64, buff); //right

            //u8g2.drawXBM(0, 0, 128,64, buff);

            //u8g2.drawXBMP(0, 0, 128,64, buff);

         

          } while (u8g2.nextPage());

            delay(1000);

      }

    }

    print write 区别

    wirte 16 进制 字节

    print 字符

    arduino print

    参考:

    u8g2绘制方法 - 简书

     https://github.com/olikraus/u8g2/wiki/u8g2reference

    玩转u8g2 OLED库,一篇就够——基于SMT32、HAL_stm32 u8g2_深藏ぺblue的博客-CSDN博客

  • 相关阅读:
    About-Flink
    【C++】c++引用和小细节
    2024年华为OD机试真题-生成哈夫曼树-Java-OD统一考试(C卷)
    娣卞害绁炵粡缃戠粶 ai,AI 绁炵粡缃戠粶
    【数据结构】排序6——桶排序、基数排序、计数排序
    【java基础学习】之DOS命令
    c语言-手写JSON解析
    R语言技能 | 不同数据类型的转换
    【软考 系统架构设计师】系统安全分析与设计① 安全基础技术
    [docker] docker 安全知识 - 镜像,port & registry
  • 原文地址:https://blog.csdn.net/qq_39239990/article/details/133952267