有一款小巧的开发板:Raspberry Zero,Broadcom BCM2835 SoC,它装有1 GHz ARM1176JZF-S单核CPU,Broadcom VideoCore IV @ 250 MHz GPU(仍支持高清)和512MB SDRAM;支持运行完整的Linux (Arm系列)系统,并且带有WiFi。

当然,这只是本文的主角之一,另一个主角是对应的UPS(算是吧):

有人给树莓派做了一个电池🔋配件,能够让树莓派可以“脱离插座”,并且扩展了USB 串口功能,能够让PC设备通过USB线在供电的同时可以通过串口登录树莓派zero进行操作以及配置。
同时,该模块支持I2C(IIC)模式读取电池电量以及电池温度:
C++ 源码可以点此查看。
Nodejs 源码可以点此查看。
C++ 源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
#include <i2c_tool.h> #include <logger.h>
int file_i2c; int length; unsigned char buffer[60] = {0};
int main(int argc, char *argv[]) { logger::instance()->init_default();
i2c_tool i2CTool; int ret; double p, v; unsigned char dataV, dataP;
i2CTool.setAddr(0x36); i2CTool.Open(); std::vector<unsigned char> data; std::vector<unsigned char> wData; wData.push_back(0x02); ret = i2CTool.transfer(wData, &data, 1); if (ret <= 0) { logger::instance()->e(__FILENAME__, __LINE__, "Read 0x02 : %d", ret); return -1; } dataV = data[0]; v = (double) (((dataV & 0xFF) << 8) + (dataV >> 8)) * 1.25 / 1000 / 16; data.clear(); wData[0] = 0x04; ret = i2CTool.transfer(wData, &data, 1); if (ret <= 0) { logger::instance()->e(__FILENAME__, __LINE__, "Read 0x04 : %d", ret); return -2; } dataP = data[0]; p = (double) ((int) ((dataP & 0xFF) << 8) + (int) (dataP >> 8)) / 256 - 5;
logger::instance()->i(__FILENAME__, __LINE__, "电压 : %.02lfV; 电量 : %.02lf %%", v, p); return 0; }
|
有兴趣的各位可以去了解一下