Продолжаем вспоминать — как цеплять периферию к ESP-12F. Рассмотрим подключение EEPROM 24C256 (своего хранилища — нету в ESP) и датчиков давления BMP280 и ускорения ADXL345.
Вроде бы в ESP8266 имеется аппаратный I2C. Во всяком случае, Wire.h работает по нему без дополнительного указания выводов GPIO. Поэтому подключение периферии выполняется так (!!!ВНИМАНИЕ. Это для Wemos D1 R1):
- SDA = D4 = D14 = GPIO4
- SCL = D3 = D15 = GPIO5
Сначала подключил память 24С256.
Прогнал сканером I2C (i2c_scan), получил правильный адрес 0х50.
Затем воспользовался библиотекой EEEPROM и накидал небольшой тест AT24C256_testWR для проверки побайтного и постраничного (8 и 32 байта) режима записи в микросхему и последующего чтения. Все прекрасно работает.
Затем дело дошло до датчика давления BMP280.
Использовал стандартный модуль:
Он уже имеет «на борту» необходимые подтягивающие резисторы и позволяет подключать себя к контроллеру по SPI или I2C. Мне был интересен второй вариант. Подключил, прогнал сканером, получил адрес 0х76.
Далее воспользовался библиотеками, предлагаемыми Adafruits. Для подключения BMP280 понадобились аж три(!) библиотеки: Adafruit_BusIO-master, Adafruit_Sensor-master, Adafruit_BMP280_Library-master.
Запустил тестовый пример — не работает! Выяснилось, что «по умолчанию» библиотека работает с датчиком с адресом 0х77! Пришлось подставлять нужный нам адрес в begin(). Тестовая программа bmp280test_0x76. Результат такой:
Temperature = 27.85 *C
Pressure = 99376.47 Pa
Approx altitude = 163.51 m
Temperature = 27.84 *C
Pressure = 99377.08 Pa
Approx altitude = 163.46 m
Потом нашел «в мусоре на столе» датчик ускорения ADXL345.
Наличие на плате стабилизатора напряжения вызывало некоторые опасения насчет работы при питании 3.3В, но они оказались напрасны — акселерометр завелся с пол-пинка. Прогнал сканером I2C — обнаружено новое устройство с адресом 0х53.
Scanning…
I2C device found at address 0x50 !
I2C device found at address 0x53 !
I2C device found at address 0x76 !
done
Подключил библиотеку Arduino-ADXL345-master и взял из нее пример ADXL345_simple. Без всяких «танцев с бубном» все завелось:
Selected measurement range: +/- 16 g
Selected data rate: 100 Hz
Xraw = 0.00 Yraw = -153.00 Zraw: -29.00 Xnorm = -7.18 Ynorm = -6.00 Znorm = -1.14
Xraw = -194.00 Yraw = -161.00 Zraw: -32.00 Xnorm = -7.61 Ynorm = -6.32 Znorm = -1.26
Xraw = -193.00 Yraw = -161.00 Zraw: -30.00 Xnorm = -7.57 Ynorm = -6.32 Znorm = -1.18
Тестовая программа для совместной работы датчика давления и памяти EEPROM bmp280_24c265-test_0x76. Написано наспех, кое как, но разобраться можно. Тест пишет показания в память блоками по 8 байт. Для последующего чтения содержимого EEPROM можно воспользоваться наброском: AT24C256_read.
Тестовая программа для совместной работы датчика давления, акселерометра и EEPROM памяти bmp280_adxl345_24c265-test. Написано наспех, кое как, но разобраться можно. Тест выводит на экран и пишет показания датчиков в память блоками по 8 байт.
7080
Temperature = 28.07 AF0 *C
Pressure = 99721.56 4D09 Pa/-80000
Approx altitude = 134.36 3458 m/sm
Xraw = 1.00 Yraw = -202.00 Zraw: 144.00
7088
Temperature = 28.07 AF0 *C
Pressure = 99721.23 4D09 Pa/-80000
Approx altitude = 134.39 3458 m/sm
Xraw = 1.00 Yraw = -202.00 Zraw: 145.00