mirror of
https://github.com/IoTManagerProject/IoTManager.git
synced 2026-03-30 03:49:13 +03:00
Merge pull request #210 from biveraxe/ver4dev
Делаем поиск адреса I2C устройств более удобным
This commit is contained in:
@@ -40,4 +40,4 @@ boolean isDigitDotCommaStr(const String& str);
|
|||||||
|
|
||||||
String prettyBytes(size_t size);
|
String prettyBytes(size_t size);
|
||||||
|
|
||||||
String uint64ToString(uint64_t input);
|
String uint64ToString(uint64_t input, uint8_t base = 10);
|
||||||
|
|||||||
@@ -15,16 +15,17 @@ class Lcd2004 : public IoTItem {
|
|||||||
String _id2show;
|
String _id2show;
|
||||||
String _descr;
|
String _descr;
|
||||||
int _prevStrSize;
|
int _prevStrSize;
|
||||||
|
String _addr;
|
||||||
|
|
||||||
bool _isShow = true; // экран показывает
|
bool _isShow = true; // экран показывает
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Lcd2004(String parameters) : IoTItem(parameters) {
|
Lcd2004(String parameters) : IoTItem(parameters) {
|
||||||
String addr, size, xy;
|
String size, xy;
|
||||||
_prevStrSize = 0;
|
_prevStrSize = 0;
|
||||||
|
|
||||||
jsonRead(parameters, "addr", addr);
|
jsonRead(parameters, "addr", _addr);
|
||||||
if (addr == "") {
|
if (_addr == "") {
|
||||||
scanI2C();
|
scanI2C();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -33,7 +34,7 @@ class Lcd2004 : public IoTItem {
|
|||||||
int w = selectFromMarkerToMarker(size, ",", 0).toInt(); //количество столбцов
|
int w = selectFromMarkerToMarker(size, ",", 0).toInt(); //количество столбцов
|
||||||
int h = selectFromMarkerToMarker(size, ",", 1).toInt(); //количество строк
|
int h = selectFromMarkerToMarker(size, ",", 1).toInt(); //количество строк
|
||||||
if (LCDI2C == nullptr) { //инициализации экрана еще не было
|
if (LCDI2C == nullptr) { //инициализации экрана еще не было
|
||||||
LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(addr), w, h);
|
LCDI2C = new LiquidCrystal_I2C(hexStringToUint8(_addr), w, h);
|
||||||
if (LCDI2C != nullptr) {
|
if (LCDI2C != nullptr) {
|
||||||
LCDI2C->init();
|
LCDI2C->init();
|
||||||
}
|
}
|
||||||
@@ -62,6 +63,8 @@ class Lcd2004 : public IoTItem {
|
|||||||
//LCDI2C->print("Helloy,Manager 404 !");
|
//LCDI2C->print("Helloy,Manager 404 !");
|
||||||
//Serial.printf("ffff %s\n", _id2show);
|
//Serial.printf("ffff %s\n", _id2show);
|
||||||
_prevStrSize = tmpStr.length();
|
_prevStrSize = tmpStr.length();
|
||||||
|
} else {
|
||||||
|
scanI2C();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
#include "classes/IoTGpio.h"
|
#include "classes/IoTGpio.h"
|
||||||
#include <Adafruit_MCP23X17.h>
|
#include <Adafruit_MCP23X17.h>
|
||||||
|
|
||||||
void scanI2C();
|
|
||||||
|
|
||||||
class Mcp23017Driver : public IoTGpio {
|
class Mcp23017Driver : public IoTGpio {
|
||||||
private:
|
private:
|
||||||
Adafruit_MCP23X17 _mcp;
|
Adafruit_MCP23X17 _mcp;
|
||||||
@@ -39,14 +37,14 @@ class Mcp23017Driver : public IoTGpio {
|
|||||||
class Mcp23017 : public IoTItem {
|
class Mcp23017 : public IoTItem {
|
||||||
private:
|
private:
|
||||||
Mcp23017Driver* _driver;
|
Mcp23017Driver* _driver;
|
||||||
|
String _addr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Mcp23017(String parameters) : IoTItem(parameters) {
|
Mcp23017(String parameters) : IoTItem(parameters) {
|
||||||
_driver = nullptr;
|
_driver = nullptr;
|
||||||
|
|
||||||
String addr;
|
jsonRead(parameters, "addr", _addr);
|
||||||
jsonRead(parameters, "addr", addr);
|
if (_addr == "") {
|
||||||
if (addr == "") {
|
|
||||||
scanI2C();
|
scanI2C();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -58,10 +56,15 @@ class Mcp23017 : public IoTItem {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_driver = new Mcp23017Driver(index, addr);
|
_driver = new Mcp23017Driver(index, _addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doByInterval() {}
|
void doByInterval() {
|
||||||
|
if (_addr == "") {
|
||||||
|
scanI2C();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//возвращает ссылку на экземпляр класса Mcp23017Driver
|
//возвращает ссылку на экземпляр класса Mcp23017Driver
|
||||||
IoTGpio* getGpioDriver() {
|
IoTGpio* getGpioDriver() {
|
||||||
|
|||||||
@@ -93,14 +93,14 @@ class Pcf8574Driver : public IoTGpio {
|
|||||||
class Pcf8574 : public IoTItem {
|
class Pcf8574 : public IoTItem {
|
||||||
private:
|
private:
|
||||||
Pcf8574Driver* _driver;
|
Pcf8574Driver* _driver;
|
||||||
|
String _addr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Pcf8574(String parameters) : IoTItem(parameters) {
|
Pcf8574(String parameters) : IoTItem(parameters) {
|
||||||
_driver = nullptr;
|
_driver = nullptr;
|
||||||
|
|
||||||
String addr;
|
jsonRead(parameters, "addr", _addr);
|
||||||
jsonRead(parameters, "addr", addr);
|
if (_addr == "") {
|
||||||
if (addr == "") {
|
|
||||||
scanI2C();
|
scanI2C();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -112,10 +112,15 @@ class Pcf8574 : public IoTItem {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_driver = new Pcf8574Driver(index, addr);
|
_driver = new Pcf8574Driver(index, _addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doByInterval() {}
|
void doByInterval() {
|
||||||
|
if (_addr == "") {
|
||||||
|
scanI2C();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//возвращает ссылку на экземпляр класса Pcf8574Driver
|
//возвращает ссылку на экземпляр класса Pcf8574Driver
|
||||||
IoTGpio* getGpioDriver() {
|
IoTGpio* getGpioDriver() {
|
||||||
|
|||||||
@@ -4,32 +4,29 @@
|
|||||||
void scanI2C() {
|
void scanI2C() {
|
||||||
byte error, address;
|
byte error, address;
|
||||||
int nDevices;
|
int nDevices;
|
||||||
|
String message = "";
|
||||||
Serial.println("Scanning...");
|
|
||||||
|
|
||||||
nDevices = 0;
|
nDevices = 0;
|
||||||
for(address = 8; address < 127; address++ ){
|
for(address = 8; address < 127; address++ ) {
|
||||||
Wire.beginTransmission(address);
|
Wire.beginTransmission(address);
|
||||||
error = Wire.endTransmission();
|
error = Wire.endTransmission();
|
||||||
|
|
||||||
if (error == 0){
|
if (error == 0){
|
||||||
Serial.print("I2C device found at address 0x");
|
message += "I2C device found at address 0x";
|
||||||
if (address<16)
|
message += uint64ToString(address, 16);
|
||||||
Serial.print("0");
|
message += " !";
|
||||||
Serial.print(address,HEX);
|
|
||||||
Serial.println(" !");
|
|
||||||
|
|
||||||
nDevices++;
|
nDevices++;
|
||||||
}
|
}
|
||||||
else if (error==4) {
|
else if (error==4) {
|
||||||
Serial.print("Unknow error at address 0x");
|
message += "Unknow error at address 0x";
|
||||||
if (address<16)
|
message += uint64ToString(address, 16);
|
||||||
Serial.print("0");
|
|
||||||
Serial.println(address,HEX);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (nDevices == 0)
|
if (nDevices == 0)
|
||||||
Serial.println("No I2C devices found\n");
|
message += "No I2C devices found\n";
|
||||||
else
|
else
|
||||||
Serial.println("done\n");
|
message += "done\n";
|
||||||
|
|
||||||
|
SerialPrint("i", "I2C Scaner", message);
|
||||||
}
|
}
|
||||||
@@ -183,9 +183,8 @@ String prettyBytes(size_t size) {
|
|||||||
return String(size / 1024.0 / 1024.0 / 1024.0) + "GB";
|
return String(size / 1024.0 / 1024.0 / 1024.0) + "GB";
|
||||||
}
|
}
|
||||||
|
|
||||||
String uint64ToString(uint64_t input) {
|
String uint64ToString(uint64_t input, uint8_t base) {
|
||||||
String result = "";
|
String result = "";
|
||||||
uint8_t base = 10;
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
char c = input % base;
|
char c = input % base;
|
||||||
|
|||||||
Reference in New Issue
Block a user