数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1861|回复: 10

sw3518快充模块添加电压、电流等信息通过oled显示,单路

[复制链接]
发表于 2025-3-25 23:05:35 | 显示全部楼层 |阅读模式
参考feng4253大佬的sw3518快充模块增加 电压、电流显示(二)的代码修改的单路SW3518读取的程序,修改SSD1306的i2c地址为0x3D实现oled与sw3518共用一条i2c总线,不需要添加i2c switch芯片就可以读取sw3518的信息显示到oled上



修改SSD1306oled的i2c地址为0x3D,把oled屏幕背面的0x7B位置的电阻换到0x7A


SW3518与OLED的i2c引脚连接到esp8266的GPIO4与GPIO5,SDA连接到GPIO4,SCL连接到GPIO5,SW3518与OLED的I2C引脚可以分别并在一起,两个地址不冲突可以使用一条总线

临时搭起来验证的,还没来得及画板


代码是参考其他大佬代码改的,自己不会写(只会结合deepseek摸索着改改),有大佬可以帮忙优化最好

附件为用到的库文件及ino文件
以下是arduino的代码



#include <Wire.h>
#include <U8g2lib.h>
#include <h1_SW35xx.h>
#define setFont_6 u8g_font_5x7
#define setFont_Large u8g2_font_7x14B_tf  // 大号字体
#define setFont_Medium u8g2_font_6x10_tf  // 中号字体
#define setFont_Small u8g2_font_5x7_tf    // 小号字体

// 初始化U8g2对象
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, 0X3D, U8X8_PIN_NONE, U8X8_PIN_NONE);
using namespace h1_SW35xx;

SW35xx sw(Wire);

void setup() {

  Serial.begin(115200);  //显示屏和引脚初始化
  Wire.begin();
  u8g2.setI2CAddress(0x3D*2);
  u8g2.enableUTF8Print();
  u8g2.begin();
  pinMode(LED_BUILTIN, OUTPUT);  // Initialize the LED_BUILTIN pin as an output
  sw.setMaxCurrent5A();//设置最大电流

}

void loop() {
  //Wire.begin();
  digitalWrite(LED_BUILTIN, LOW);  // Turn the LED on (Note that LOW is the voltage level
  u8g2.setFont(setFont_6);
  u8g2.setFontDirection(0);
  u8g2.clearBuffer();
  VIWH();     //框架绘制并显示//通道0
  sw35XX();   //电流、电压数据读取通道2
  u8g2.sendBuffer();
  digitalWrite(LED_BUILTIN, HIGH);  // Turn the LED off by making the voltage HIGH

}

const char *fastChargeType2String(SW35xx::fastChargeType_t fastChargeType) {
  switch (fastChargeType) {
    case SW35xx::NOT_FAST_CHARGE:
      return "NA";
      break;
    case SW35xx::QC2:
      return "QC2.0";
      break;
    case SW35xx::QC3:
      return "QC3.0";
      break;
    case SW35xx::FCP:
      return "FCP";
      break;
    case SW35xx::SCP:
      return "SCP";
      break;
    case SW35xx::PD_FIX:
      return "PD Fix";
      break;
    case SW35xx::PD_PPS:
      return "PD PPS";
      break;
    case SW35xx::MTKPE1:
      return "PE1.1";
      break;
    case SW35xx::MTKPE2:
      return "PE2.0";
      break;
    case SW35xx::LVDC:
      return "LVDC";
      break;
    case SW35xx::SFCP:
      return "SFCP";
      break;
    case SW35xx::AFC:
      return "AFC";
      break;
    default:
      return "unknown";
      break;
  }
}

void sw35XX() {
  
  float W1 = sw.vout_mV * sw.iout_usbc_mA/1000000;
  float W2 = sw.vout_mV * sw.iout_usba_mA/1000000;
  float vin=sw.vin_mV;
  float vout=sw.vout_mV;
  float aa=sw.iout_usba_mA;
  float ac=sw.iout_usbc_mA;

  //计算温度
  float Rntc = sw.readTemperature()/100-2;
  float lnR = log(Rntc / 10.0);
  float T = 1.0/((1.0/298.15)+(1.0/3450)*lnR);
  float tempC = T - 273.15;

  sw.readStatus();
  sw.begin();
  Serial.println("==================CN1=====================");
  printf("Current input voltage:%dmV\n", sw.vin_mV);
  u8g2.setFont(setFont_Large);
  u8g2.setCursor(23, 14);
  u8g2.print(vin/1000);//输入电压
  printf("Current output voltage:%dmV\n", sw.vout_mV);
  u8g2.setCursor(27, 28);
  u8g2.print(vout/1000);//输出电压
  u8g2.setCursor(10, 53);
  u8g2.print(ac/1000);//C口输出电流
  printf("Current USB-A current:%dmA\r\n", sw.iout_usba_mA);
  u8g2.setCursor(74, 53);
  u8g2.print(aa/1000);//A口输出电流
  printf("Current fast charge type:%s\n", fastChargeType2String(sw.fastChargeType));
  u8g2.setCursor(80, 28);
  u8g2.print(fastChargeType2String(sw.fastChargeType));//快充协议
  if (sw.fastChargeType == SW35xx::PD_FIX || sw.fastChargeType == SW35xx::PD_PPS)
  printf("Current PD version:%d\n", sw.PDVersion);
  u8g2.setCursor(77, 14);
  u8g2.print(tempC);//读取温度
  u8g2.setCursor(10, 64);
  u8g2.print(W1);//C口功率
  u8g2.setCursor(74, 64);
  u8g2.print(W2);//A口功率
  Serial.println("=======================================");
  Serial.println("");
  
  delay(400);
}

void VIWH() {

//oled显示
  u8g2.setFont(setFont_Large);//设置字体
  u8g2.drawStr(0, 14, "IN:      V");
  u8g2.drawStr(113, 10, "o");  //摄氏度圆圈
   u8g2.drawStr(120, 14, "C"); //摄氏度C
  u8g2.drawStr(49, 53, "A");
  u8g2.drawStr(113, 53, "A");
  u8g2.drawStr(49, 64, "W");
  u8g2.drawStr(113, 64, "W");
  u8g2.drawStr(0, 28, "OUT:     V");
  u8g2.setFont(setFont_Medium);//设置字体
  u8g2.drawStr(15, 40, "TYPE-C");
  u8g2.drawStr(79, 40, "TYPE-A");
  u8g2.drawHLine(0, 16, 128);   // 标题下方横线
  u8g2.drawHLine(0, 30, 128);   // 主数据显示区分隔线
  u8g2.drawVLine(64, 30, 48);   // 左右分界线
}








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +60 收起 理由
家睦 + 60

查看全部打赏

发表于 2025-3-26 02:02:54 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2025-3-26 11:23:50 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2025-3-26 11:36:39 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2025-3-26 11:48:30 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-26 12:32:31 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-26 12:35:31 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2025-3-26 22:06:44 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2025-8-4 08:49:37 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2025-10-1 10:05:56 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2026-2-24 15:28:38 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-4-10 06:23 , Processed in 0.374400 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表