Всем спасибо кто хоть чем-то поможет, либо даст дельный совет. Администратору просьба не ругать, если пишу не туда, просьба перекинуть в нужную тему либо форум.
Сам вопрос в следующем, перерыв кучу макулатуры, сайтов, а так же сайт "гайвера" ответа на свой вопрос так и не нашел. Закл-ся он в следующем.
Есть плата Arduino Nano к ней подключен модуль SIM800L, дисплей OLED1306 128x32 + ESP01s. Есть первый вопрос, как сделать так, чтобы с ардуино послать команду AT например подключения к сети, а на дисплей вывести например ip адрес и статус подключения. Сразу выкладываю свой скетч, если можно добавьте в него строки как нужно или как должно быть, спасибо большое. Буду далее спрашивать ваших советов и показывать результаты работы, есть глобальная задумка мега умной системы с голосовыми и так далее командами.
Сам вопрос в следующем, перерыв кучу макулатуры, сайтов, а так же сайт "гайвера" ответа на свой вопрос так и не нашел. Закл-ся он в следующем.
Есть плата Arduino Nano к ней подключен модуль SIM800L, дисплей OLED1306 128x32 + ESP01s. Есть первый вопрос, как сделать так, чтобы с ардуино послать команду AT например подключения к сети, а на дисплей вывести например ip адрес и статус подключения. Сразу выкладываю свой скетч, если можно добавьте в него строки как нужно или как должно быть, спасибо большое. Буду далее спрашивать ваших советов и показывать результаты работы, есть глобальная задумка мега умной системы с голосовыми и так далее командами.
rabota1:
#include <SoftwareSerial.h>
#include <Wire.h>
//#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (A4 = SDA, A5 = SCL)
// Reset pin # (or -1 если не имеет pin сброса)
#define OLED_RESET -1 // Если ваш OLED дисплей не имеет pin сброса, вы должны установить переменную OLED_RESET в значение -1, как сделано у меня
//See datasheet for Address
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define rxPin 8
#define txPin 9
SoftwareSerial sim800L(rxPin,txPin);
String network, battery;
void setup() {
//Begin serial communication with Serial Monitor
Serial.begin(115200);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// the library initializes this with an Adafruit splash screen.
display.display();
delay(2000); // Пауза 2 секунды
// Очистка буфера дисплея
display.clearDisplay();
//Устанавливаем связь Arduino и SIM800L
sim800L.begin(9600);
sim800L.println("AT");
delay(1000);
sim800L.println("AT+CSCS=PCCP936"); // установка кодировки ввода/вывода текста.
delay(1000);
sim800L.println("AT+CMGF=1");
delay(1000);
}
void loop() {
//показатель сети устанавливаем на 0 network = "0";
//показатель заряда батареи устанавливаем на 0 battery = "0";
network = get_network();
battery = get_battery();
display_battery();
display_network_battery();
}
int get_network()
{
String buff;
//buff = "+CSQ: 16,0";
unsigned int result, index1, index2, timeout=0;
sim800L.println("AT+CSQ");
for (unsigned long start = millis(); millis() - start < 2000;){
while(sim800L.available())
{
buff = sim800L.readString();
timeout = 1;
break;
}
}
if(timeout == 0)
{ return 0; }
Serial.println(buff);
//String network_status;
//_____________________________________________________
//Remove sent "AT Command" from the response string.
index1 = buff.indexOf("\r");
buff.remove(0, index1+2);
buff.trim();
//_____________________________________________________
//_____________________________________________________
index1 = buff.indexOf(":");
index2 = buff.indexOf(",");
buff = buff.substring(index1+1, index2);
buff.trim();
result = buff.toInt();
if(result == 99)
{
//сигнал неизвестен или не обнаружен
return 0;
}
else if(result >= 2 && result <= 9)
{
//Signal Quality = Marginal
return 20;
}
else if(result >= 10 && result <= 14)
{
//Signal Quality = OK
return 40;
}
else if(result >= 15 && result <= 19)
{
//Signal Quality = Good
return 60;
}
else if(result >= 20 && result <= 31)
{
//Signal Quality = Excellent
return 99;
}
return 0;
}
int get_battery()
{
String buff;
//buff = "+CBC: 0,99,4190";
unsigned int index1, index2, timeout=0;
sim800L.println("AT+CBC");
for (unsigned long start = millis(); millis() - start < 2000;){
while(sim800L.available())
{
buff = sim800L.readString();
timeout = 1;
break;
}
}
if(timeout == 0)
{ return 0; }
Serial.println(buff);
//String network_status;
//_____________________________________________________
//Remove sent "AT Command" from the response string.
index1 = buff.indexOf("\r");
buff.remove(0, index1+2);
buff.trim();
//_____________________________________________________
//_____________________________________________________
//search for first comma (,) = index1
//search for 2nd comma (,) = index2
index1 = buff.indexOf(",");
index2 = buff.indexOf(",", index1+1);
String result = buff.substring(index1+1, index2);
result.trim();
Serial.println(result);
//buff.remove(0, index+2);
return result.toInt();
}
void display_battery()
{
}
void display_network_battery()
{
display.clearDisplay();
display.drawRect(109, 1, 15, 8, WHITE); //Первый кубик рисования батарейк
display.drawRect(123, 2, 3, 6, WHITE); //Второй кубик рисования батарейки
display.fillRect(111, 3, (int)(1.5 * (battery.toInt()) / 10), 4, WHITE);
display.drawLine(1, 1, 8, 1, WHITE); //Верхняя палочка значка связи
display.drawLine(1, 1, 5, 5, WHITE);
display.drawLine(9, 1, 5, 5, WHITE);
display.fillRect(5, 1, 1, 8, WHITE); //Центральная палочка значка связи
int net = network.toInt() / 20;
int x1 = 8, y1 = 7, x2 = 2, y2 = 2;
for (int i = 1; i <= net; i++)
{
display.fillRect(x1, y1, x2, y2, WHITE);
x1 += 3; // Уменьшает или увеличивает расстояние между палочками качества сигнала
y1 -= 2;
y2 += 5;
y2 -= 3;
}
// display.setTextSize(1);
// display.setTextColor(WHITE);
// display.setCursor(40, 1);
// display.print(network);
// display.setTextSize(1);
// display.setCursor(53, 1);
// display.println("%");
display.display();
// delay(400);
}
Вложения
-
5.8 KB Просмотры: 2