Всем доброго времени суток.
Нужна помощ по модулю SIM800.
Вообщем дело обстоит так.. подключаю его от блока питания компа 12 вольт через понижающий шилд,
подаю 4.10 вольта при поиске сети 4.09 вольт, тоесть отлично без просадок.
После включения светодеод мигает быстро после чего медленнее (сеть нашел).
Сигнальные ТХ к RX а RX к ТХ ( пробовал и через делитель и на прямую) к пинам №18,19 на ардуино мега . ну и земли соединил.
залил скетч :
01 | #include <SoftwareSerial.h> |
02 | SoftwareSerial mySerial(19, 18); |
05 | Serial .println( "Goodnight moon!" ); |
06 | mySerial.begin(19200); |
07 | mySerial.println( "AT" ); |
11 | if (mySerial.available()) |
12 | Serial .write(mySerial.read()); |
13 | if ( Serial .available()) |
14 | mySerial.write( Serial .read()); |
так вот при открытие монитора порт выставил скорость и новая строка, и мне приходит сообщение "Goodnight moon!" из скетча, и все...
пишу в монитор порта AT, ничего никакой реакции, также пробовал ATI тоже реакции 0.
что я не так сделал дайте идею кто знает? и еще один из контактов слота симкарты както странно припаян, припоя не видно на нем,
а прозвонить незнаю как , и может ли не работать АТ команды из за этого контакта?
Кто знает отзовитесь пож... Заранее спасибо
У меня тоже держатель сим на вид плохо припаян, но работает. Да и у Вас видимо тоже работает, раз сеть находит, да и без симки должны AT идти.
А в мониторе порта внизу рядом со скоростью стоит "Новая строка"?
да "Новая строка" выставлена, скетч правильный залит ?
Да правильный, проверяйте подключение, может RX-TX перепутали, получается у Вас 19 пин должен идти на TX модуля, а 18 на RX. И как правильно заметили нужен хотя бы делитель напряжения (хотя в даташите рекомендуются транзисторы), так как у ардуины 5В, а там надо 2,8В, для RX ардуины вообще не хватает, так как там от 3В считается 1, но это примерно, на самом деле работает, я сделал делитель для TX ардуины, а для RX просто резистор небольшой на 39 Ом (такой нашел), хотя пишут ничего не надо, итак не хватает же, но на всякий случай, а делитель из резисторов 1кОм и ~1,2кОм (из двух последовательно, одного не нашел). Но пишут и напрямую работает, но не рекомендуется... Кстати похоже из-за того что через делитель, то короткие команды работают на больших скоростях, а длинные типа чтение смс, ошибки (смс поврежденный текст приходит, хотя это получается не через делитель, а через резистор один), не сразу разобрался в чем косяк, оказалась байты другие летят иногда... убавил скорость со 115200 ниже и заработало, на 19200 так-то должно стабильно работать.
БЕДА БЕДОЙ не в какую не хочет отвечать, менял провода tx rx местами, с делителем и без него пробовал, ничего не отвечает
Вот еще по SoftwareSerial:
На платах Arduino Mega и Mega2560 некоторые выводы не поддерживают прерывания, возникающие при изменении уровня сигнала. В силу этого, на данных платах в качестве вывода RX могут использоваться только следующие выводы: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
Вот и ответ =)
в скетче прописал так SoftwareSerial mySerial(15, 14); // RX, TX
ну и подключил соответственно, и снова реакции 0
Попробуйте 15 и 14 отключить от модуля и просто между собой замкнуть, должно то что пишите сразу появляться, так хоть ардуину проверите.
Jatixo спасибо огромно за подсказку по поиску проблемы, Вы как в воду глядели, и действительно проблема до модуля СИМ800 не дошла, а конкретннее по вашему совету замкнул рх и тх и как не странно ничего, подумал спалил контакты ... после проверки светодеодом (поморгал) оказалось что они рабочие. И вот я снова застрял, одно предположение только что библиотека SoftwareSerial не работает... возможно ли такое? или еще какие варианты могут быть ?
Вряд ли библиотека, попробуйте другие пины из списка, скорость 9600, также можно arduino новую версию скачать, но это вряд ли...
вообщем так расскажу. на форуме нашел тему и ссылку на библиотеку AltSoftSerial ( http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html )
Скачал, установил, там описаны контакты для этой библиотеки - являются константами, у меня на меге это 46,48. Но что то там написано про татаймер который занимает эта библиотека и возможны несовместимости с другими, какими и почему так и не понял.... мой английский очень хромает.
также опросил модуль на доступные сети, вывел мтс, билайн, мегафон а вот теле2 отсутствует, хотя на мобилке сеть полная. Не связано ли это с 3G а модуль поддерживает 2G?
И почему не работает библиотека SoftwareSerial ? есть ли у кого предположения?/
https://www.arduino.cc/en/Reference/Serial
там выделены Serial1, Serial2 может так и писать надо, а не myserial и там выводы другие:)
нет при инициализации портов в библиотеке SoftwareSerial используется команда
SoftwareSerial mySerial(19, 18);
// RX, TX
к сожалению Ваш ответ мне не помог!
Еще есть у кого идеи по посту
#10 ?Это аппаратные serial, им softwareserial не нужно, к ним нужно обращаться также как к Serial (который к компьютеру идет), но с цифрой на конце. Пробуйте так, а также получилось, что Вы как раз все разы пробовали как раз эти порты, да еще и цифры всегда наоборот, попробуйте цифры поменять местами(и провода соответственно), а также другие порты из Software Serial.
В общем пробуйте так:
01
void
setup
() {
02
Serial
.begin(19200);
//Скорость порта для связи Arduino с компьютером
03
Serial
.println(
"Goodnight moon!"
);
04
Serial1.begin(19200);
//Скорость порта для связи Arduino с GSM модулем
05
Serial1.println(
"AT"
);
06
}
07
08
void
loop
() {
09
if
(Serial1.available())
10
Serial
.write(Serial1.read());
11
if
(
Serial
.available())
12
Serial1.write(
Serial
.read());
13
}
Получится 19 (RX) и 18 (TX), соответственно 19 к TX GSM, 18 к RX GSM.
замкнул тх и рх использвал как обычный сериал все работает, подключал к 50 51 контактам через SoftwareSerial не пашет, и провода менял и так и так, не выходит, в общем пришел в кыводу что нужно заменить библиотеку SoftwareSerial , где скачать можно?
Она вместе с Ардуино идет: https://www.arduino.cc/en/Main/Software
Попробуйте в новую папку поставить или обновить старую и оттуда Компилировать и Загрузить.
Baks, у меня получилось.
Так и не могу запустить ардуинку мега с библиотекой SoftwareSerial, уже пробовал другую версия компилятора скачал arduino-1.7.8, до этого работал с arduino-nightly. Контакты перемыкаю, тоесть ХТ с РХ на адуино. В общем взял пример из библиотеки
01
#include <SoftwareSerial.h>
02
03
SoftwareSerial mySerial(10, 11);
// RX, TX
04
05
void
setup
()
06
{
07
// Open serial communications and wait for port to open:
08
Serial
.begin(19200);
09
Serial
.println(
"Goodnight moon!"
);
10
11
mySerial.begin(19200);
12
mySerial.println(
"Hello, world?"
);
13
}
14
15
void
loop
()
// run over and over
16
{
17
if
(mySerial.available())
18
Serial
.write(mySerial.read());
19
if
(
Serial
.available())
20
mySerial.write(
Serial
.read());
21
}
пробовал все пины для меги (соответственно в скетче тоже менял) и скорасть менял, не помогает.
Подскажите пожалуйсто как запустить эту библиатеку, что можно еще проверить ?
Поменяйте местами пины 11 и 10.
1
SoftwareSerial mySerial(11, 10);
// RX, TX
не помогло, выводит только Goodnight moon
есть еще идеи? идеи иссякли у меня :(
свето https://www.google.com.ua/search?hl=ru-UA&source=hp&biw=&bih=&q=%D0%B4%D0%B8%D0%BE%D0%B4&gbv=2&oq=%D0%B4%D0%B8%D0%BE%D0%B4&gs_l=heirloom-hp.3..0j0i131j0l8.864.1583.0.2064.4.4.0.0.0.0.115.383.3j1.4.0....0...1ac.1.34.heirloom-hp..0.4.383.c6Lgn4zWmmQ
Baks, у Вас MEGA2560?
Если так, то необходимо вместо Serial указывать Serial1 или Serial2 или Serial3.
The Arduino Mega has three additional serial ports: Serial1 on pins 19 (RX) and 18 (TX), Serial2 on pins 17 (RX) and 16 (TX), Serial3 on pins 15 (RX) and 14 (TX). To use these pins to communicate with your personal computer, you will need an additional USB-to-serial adaptor, as they are not connected to the Mega's USB-to-serial adaptor. To use them to communicate with an external TTL serial device, connect the TX pin to your device's RX pin, the RX to your device's TX pin, and the ground of your Mega to your device's ground. (Don't connect these pins directly to an RS232 serial port; they operate at +/- 12V and can damage your Arduino board.)
Т.е. если я правильно понял, на 10 и 11 порту по сериалу не будет рабоать. Попробуйте Serial1 и порты 19 и 18.
dr.lmg с сериалом все отлично работает, на всех трех, весь вопрос в том что библиотека SoftwareSerial не в какую не хочет заработать на моей ардуинке
"Baks, у Вас MEGA2560?" и да вы правы. пока использую не обычный сериал а библиотеку AltSoftSerial . она работает нормально. а вот с SoftwareSerial не на каких пинах не запускается. может чтото с таймером?
Ну с другими если работает, то и фиг с ней, с этот библиотекой. Что в ней такого, что нужно обязательно использовать ее?
У меня библиотека relay8 конфликтовала с одной из других библиотек. Но ошибок не было, протсо не работала и все.
Я ее переместил в самый верх, над остальными, и все заработало. Попробуйте подключать SoftSerial самым первым. И самым последним.
хотел использовать библиотеку SIM800 а она использует SoftwareSerial вот в чем вся загвостка переписывать очень страшно, и думаю очень долго будет, а проверяю я какраз тестовым скетчем там только одна она и используется #18
А мой скетч с бибилиотекой SIM900 не пробовали?
так он тоже эту библиотеку использут значит и работать не будет
Так попробуйте, прежде чем утверждать :)
Baks, проблему я так понял решили? Расскажите в чем она была?
Всем доброго времени суток.
Кое-что по работе с SIM800L есть здесь:
http://arduino.ru/forum/proekty/gsm-sistema-kontrolya-za-avtomaticheskim...
Все работает как часы.
У меня аналогичная проблема была. Не стал использовать SoftwareSerial, все повесил на аппоратный RX TX. Плюс ко всему скорость работы SIM800 была по умолчанию настроена на 115200, а я пробовал и 9600 и 4800 и т.д. И в результате, все работает как часы)))
Я походу знаю в чем дело!!!! Но не знаю как исправить (((
У меня поначалу модуль бодро отвечал на все команды, но не отправлял СМС (скетч использовал из шапки).
Потом я нашел вот такой код для сетапа:
mySerial.println("AT+CLIP=1"); //включаем АОН
delay(100);
mySerial.println("AT+CMGF=1"); //режим кодировки СМС - обычный (для англ.)
delay(100);
mySerial.println("AT+CSCS=\"GSM\""); //режим кодировки текста
delay(100);
СМСки стали улетать но модуль перестал отвечать на команды (хотя продолжает их выполнять).
Как вернуть все обратно не пойму.
РАЗОБРАЛСЯ!!!!
Нужно "-" источника питания повесить ещё и на GND платы ардуино. Все стало работать норм!!!!
Подскажите как Вы реализовали? Схема подключения. Скетч с примером.
Все забыл уже. К концу дня соберу, вспомню, пришлю.
1
Я подключал вот так. Преобразователя небыло, использовал батарейку.
Скетч:
01
#include <SoftwareSerial.h>
02
SoftwareSerial mySerial(2, 3);
// RX, TX
03
int
ch = 0;
04
int
led = 13;
05
String val =
""
;
06
07
void
setup
() {и
08
delay(2000);
//время на инициализацию модуля
09
pinMode(led, OUTPUT);
10
digitalWrite(led, LOW);
11
Serial
.begin(19200);
//скорость порта
12
Serial
.println(
"GSM tester v1.0"
);
13
mySerial.begin(19200);
14
mySerial.println(
"AT+CLIP=1"
);
//включаем АОН
15
delay(100);
16
mySerial.println(
"AT+CMGF=1"
);
//режим кодировки СМС - обычный (для англ.)
17
delay(100);
18
mySerial.println(
"AT+CSCS=\"GSM\""
);
//режим кодировки текста
19
delay(100);
20
}
21
22
void
loop
() {
23
if
(mySerial.available()) {
//если GSM модуль что-то послал нам, то
24
while
(mySerial.available()) {
//сохраняем входную строку в переменную val
25
ch = mySerial.read();
26
val +=
char
(ch);
27
delay(10);
28
}
29
if
(val.indexOf(
"RING"
) > -1) {
//если звонок обнаружен, то проверяем номер
30
if
(val.indexOf(
"7123456789"
) > -1) {
//если номер звонящего наш. Укажите свой номер без "+"
31
Serial
.println(
"--- MASTER RING DETECTED ---"
);
32
mySerial.println(
"ATH0"
);
//разрываем связь
33
digitalWrite(led, HIGH);
//включаем светодиод на 3 сек
34
delay(3000);
35
digitalWrite(led, LOW);
//выключаем реле
36
sms(String(
"Privet, Irishka!!!"
), String(
"+7123456789"
));
//отправляем СМС на номер
37
}
38
}
else
39
Serial
.println(val);
//печатаем в монитор порта пришедшую строку
40
val =
""
;
41
}
42
if
(
Serial
.available()) {
//если в мониторе порта ввели что-то
43
while
(
Serial
.available()) {
//сохраняем строку в переменную val
44
ch =
Serial
.read();
45
val +=
char
(ch);
46
delay(10);
47
}
48
//mySerial.println(val); //передача всех команд, набранных в мониторе порта в GSM модуль
49
if
(val.indexOf(
"sendsms"
) > -1) {
//если увидели команду отправки СМС
50
sms(String(
"hello world"
), String(
"+7123456789"
));
//отправляем СМС на номер +71234567890
51
}
52
val =
""
;
//очищаем
53
}
54
}
55
56
void
sms(String text, String phone)
//процедура отправки СМС
57
{
58
Serial
.println(
"SMS send started"
);
59
mySerial.println(
"AT+CMGS=\""
+ phone +
"\""
);
60
delay(500);
61
mySerial.print(text);
62
delay(500);
63
mySerial.print((
char
)26);
64
delay(500);
65
Serial
.println(
"SMS send complete"
);
66
delay(2000);
67
}
Возможно нужно будет поэксперементировать с паузами. Можно для начала поставить поболше и опытным путем уменьшать. Мой модуль работает с приведенными здесь.
1
Я подключал вот так. Преобразователя небыло, использовал батарейку.
спалите модуль к чертовой матери.... на рх тх можно подавать не более 2,8В !!!
делаейте сами, но не тащите сюда- другие сожгут свой модуль и скажут вам спасибо.
потом еще ноют - вот чтото у меня скетч не работает.... мозги не работают ни грамма..
начнете ныть что можно не по правилам и все работает - так ходите лучше на красный свет через дорогу, но не тащите сюда такие вот "схемы".
1
Я подключал вот так. Преобразователя небыло, использовал батарейку.
спалите модуль к чертовой матери.... на рх тх можно подавать не более 2,8В !!!
Да. Резистор в килоом-другой между Tx ардуиніы и Rx модема нужен. И запаяйте его максимально быстро, т.к. ща набегут доброжелатели и вы поставите один из вариантов:
1. Резестивный делитель.
2. транзисторный каскад.
3. спец микросхему преобразования уровней
4. оптрон
5. сельсин.
Поторопитесь!
Спасибо за коментарий, но вот непонятно.
Питание GSM модуля от 3.7 в до 4.2 в. Это как раз батарейка сотового. Я же на RX/TX питание не подаю. Модуль сам формирует сигнал.
Или вы имеете в виду, что на выходах RX/TX GSM модуля уровень сигнала равен напряжению питания модуля? Или есть какая-то зависимость близкая к единице?
Информация достоверная? Очень обяжете если поясните. А то очень не хочется опять к метрологам за осциллографом с блоком переменного напряжения переться – жадные они. Но если надо схожу, графики выложу.
У меня так работает: Serial.begin(2400);
Спасибо за коментарий, но вот непонятно..............
проблема шаманства. Шаманы не читают даташиты и рекомендации в даташитах. И потом начинают шаманить, жечь гсм модули, утверждать что там полно загадок, они глючат, требуют пояснений и т.д.. Это все проблема шаманства.
Вот спасибо за четкий ответ на вопрос. И за поучения дельные спасибо. Вот прям теперь у меня как будто глаза открылись. Всего вам хорошего, внукам вашим здоровья.
1) есть даташиты.
2) есть куча инфы здесь с срисунками как нужно подключать - через резисторы с диодами..
Лень искать или поиском не умеете пользоваться?
А шаманить и претензии высказывать - уже умеете?
Подскажите почему при нажатии кнопки в блинк не всегда срабатывает пин ардуино вот скетч
*******************/
#include
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include
#include
#define ONE_WIRE_BUS 4
OneWire oneWire (ONE_WIRE_BUS);
DallasTemperature sensor (&oneWire);
// Default heartbeat interval for GSM is 60
// If you want override this value, uncomment and set this option:
//#define BLYNK_HEARTBEAT 30
// Select your modem:
#define TINY_GSM_MODEM_SIM800
//#define TINY_GSM_MODEM_SIM900
//#define TINY_GSM_MODEM_M590
#include
#include
const int ledPin = 11;
#define BAT_Pin A0 // на батарею, через делитель напряжения 39кОм / 11 кОм
float m = 66.91; // делитель для перевода АЦП в вольты
float Vbat; // переменная хранящая напряжение бортовой сети
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
const char auth[] = "хххххххххххх ";
// Your GPRS credentials
// Leave empty, if missing user or pass
const char apn[] = "internet";
const char user[] = "mts";
const char pass[] = "mts";
// Hardware Serial on Mega, Leonardo, Micro
#define SerialAT Serial1
// or Software Serial on Uno, Nano
#include
SoftwareSerial SerialAT(2, 3); // RX, TX
TinyGsm modem(SerialAT);
void setup()
{
// Set console baud rate
Serial.begin(57600);
modem.restart();
delay(10);
// Set GSM module baud rate
SerialAT.begin(38400);
delay(10000);
//Restart takes quite some time
// To skip it, call init() instead of restart()
Serial.println("START SIM800");
// Unlock your SIM card with a PIN
//modem.simUnlock("1234");
Blynk.begin(auth, modem, apn, user, pass);
sensor.begin();
delay(300);
}
void detection(){ // условия проверяемые каждые 10 сек
sensor.requestTemperatures(); // читаем температуру с трех датчиков
float temp = sensor.getTempCByIndex(0);
float temp1 = sensor.getTempCByIndex(1);
float temp2 = sensor.getTempCByIndex(2);
Serial.println(temp);
Serial.println(temp1);
Serial.println(temp2);
Blynk.virtualWrite(V1, temp);
Blynk.virtualWrite(V2, temp1);
Blynk.virtualWrite(V3, temp2);
Vbat = analogRead(BAT_Pin); // замеряем напряжение на батарее
Vbat = Vbat / m ; // переводим попугаи в вольты
delay(1000);
// read the input on analog pin 0:
/// int sensorValue = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
/// float voltage = sensorValue * (15.0/ 1023.0);
Blynk.virtualWrite(V6, Vbat);
delay(1000);
}
void loop()
{
Blynk.run();
detection();
}
Ваш скетч в таком виде никто смотреть не будет, приведите его в нормальную форму.
Как залить на сайт не пойму.
01
#include <SimpleTimer.h>
02
03
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
04
05
#include <OneWire.h>
06
#include <DallasTemperature.h>
07
#define ONE_WIRE_BUS 4
08
09
OneWire oneWire (ONE_WIRE_BUS);
10
DallasTemperature sensor (&oneWire);
11
// Default heartbeat interval for GSM is 60
12
// If you want override this value, uncomment and set this option:
13
//#define BLYNK_HEARTBEAT 30
14
15
// Select your modem:
16
#define TINY_GSM_MODEM_SIM800
17
//#define TINY_GSM_MODEM_SIM900
18
//#define TINY_GSM_MODEM_M590
19
20
#include <TinyGsmClient.h>
21
#include <BlynkSimpleSIM800.h>
22
const
int
ledPin = 11;
23
#define BAT_Pin A0 // на батарею, через делитель напряжения 39кОм / 11 кОм
24
float
m = 66.91;
// делитель для перевода АЦП в вольты
25
float
Vbat;
// переменная хранящая напряжение бортовой сети
26
27
28
// You should get Auth Token in the Blynk App.
29
// Go to the Project Settings (nut icon).
30
const
char
auth[] =
"66666666666"
;
31
32
// Your GPRS credentials
33
// Leave empty, if missing user or pass
34
const
char
apn[] =
"internet"
;
35
const
char
user[] =
"mts"
;
36
const
char
pass[] =
"mts"
;
37
38
// Hardware Serial on Mega, Leonardo, Micro
39
#define SerialAT Serial1
40
41
// or Software Serial on Uno, Nano
42
#include <SoftwareSerial.h>
43
SoftwareSerial SerialAT(2, 3);
// RX, TX
44
TinyGsm modem(SerialAT);
45
46
void
setup
()
47
{
48
// Set console baud rate
49
Serial
.begin(57600);
50
modem.restart();
51
delay(10);
52
53
// Set GSM module baud rate
54
SerialAT.begin(38400);
55
delay(10000);
56
57
58
//Restart takes quite some time
59
// To skip it, call init() instead of restart()
60
Serial
.println(
"START SIM800"
);
61
62
// Unlock your SIM card with a PIN
63
//modem.simUnlock("1234");
64
65
Blynk.begin(auth, modem, apn, user, pass);
66
sensor.begin();
67
delay(300);
68
}
69
70
71
void
detection(){
// условия проверяемые каждые 10 сек
72
sensor.requestTemperatures();
// читаем температуру с трех датчиков
73
float
temp = sensor.getTempCByIndex(0);
74
float
temp1 = sensor.getTempCByIndex(1);
75
float
temp2 = sensor.getTempCByIndex(2);
76
Serial
.println(temp);
77
Serial
.println(temp1);
78
Serial
.println(temp2);
79
Blynk.virtualWrite(V1, temp);
80
Blynk.virtualWrite(V2, temp1);
81
Blynk.virtualWrite(V3, temp2);
82
Vbat = analogRead(BAT_Pin);
// замеряем напряжение на батарее
83
Vbat = Vbat / m ;
// переводим попугаи в вольты
84
delay(1000);
85
// read the input on analog pin 0:
86
/// int sensorValue = analogRead(A0);
87
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
88
/// float voltage = sensorValue * (15.0/ 1023.0);
89
Blynk.virtualWrite(V6, Vbat);
90
delay(1000);
91
}
92
93
void
loop
()
94
{
95
Blynk.run();
96
97
98
}
Пардон не тот скетч вот тот.
001
define BLYNK_PRINT
Serial
// Comment this out to disable prints and save space
002
003
#include <OneWire.h>
004
#include <DallasTemperature.h>
005
#define ONE_WIRE_BUS 4
006
007
OneWire oneWire (ONE_WIRE_BUS);
008
DallasTemperature sensors(&oneWire);
009
unsigned
long
Time1 = 0;
010
unsigned
long
Time2 = 0;
011
012
#include <SimpleTimer.h>
013
SimpleTimer timer;
014
015
016
017
018
// Default heartbeat interval for GSM is 60
019
// If you want override this value, uncomment and set this option:
020
//#define BLYNK_HEARTBEAT 30
021
022
// Select your modem:
023
#define TINY_GSM_MODEM_SIM800
024
//#define TINY_GSM_MODEM_SIM900
025
//#define TINY_GSM_MODEM_M590
026
027
#include <TinyGsmClient.h>
028
#include <BlynkSimpleSIM800.h>
029
030
031
// Select your pin with physical button
032
033
034
035
036
// You should get Auth Token in the Blynk App.
037
// Go to the Project Settings (nut icon).
038
const
char
auth[] =
"66"
;
039
040
// Your GPRS credentials
041
// Leave empty, if missing user or pass
042
const
char
apn[] =
"internet"
;
043
const
char
user[] =
"mts"
;
044
const
char
pass[] =
"mts"
;
045
046
// Hardware Serial on Mega, Leonardo, Micro
047
#define SerialAT Serial1
048
049
// or Software Serial on Uno, Nano
050
#include <SoftwareSerial.h>
051
SoftwareSerial SerialAT(2, 3);
// RX, TX
052
TinyGsm modem(SerialAT);
053
054
#define RELE 11
055
bool
rele;
056
057
058
const
int
btnPin = 12;
059
WidgetLED led3(V5);
060
boolean btnState =
false
;
061
062
063
064
void
setup
()
065
{
066
// Set console baud rate
067
Serial
.begin(57600);
068
modem.restart();
069
delay(10);
070
071
// Set GSM module baud rate
072
SerialAT.begin(19200);
073
delay(100);
074
075
076
//Restart takes quite some time
077
// To skip it, call init() instead of restart()
078
Serial
.println(
"START SIM800"
);
079
080
// Unlock your SIM card with a PIN
081
//modem.simUnlock("1234");
082
083
Blynk.begin(auth, modem, apn, user, pass);
084
085
sensors.begin();
086
delay(300);
087
// initialize the LED pin as an output:
088
089
pinMode(btnPin, INPUT_PULLUP);
090
091
pinMode(RELE, OUTPUT);
092
while
(Blynk.connect() ==
false
) {
093
// Wait until connected}
094
095
}
096
097
timer.setInterval(500L, buttonLedWidget);
098
099
}
100
void
detection(){
// условия проверяемые каждые 10 сек
101
sensors.requestTemperatures();
// читаем температуру с трех датчиков
102
float
temp = sensors.getTempCByIndex(0);
103
float
temp1 = sensors.getTempCByIndex(1);
104
float
temp2 = sensors.getTempCByIndex(2);
105
Serial
.println(temp);
106
Blynk.virtualWrite(V1, temp);
107
Blynk.virtualWrite(V2, temp1);
108
Blynk.virtualWrite(V3, temp2);
109
// read the input on analog pin 0:
110
int
sensorValue = analogRead(A0);
111
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
112
float
voltage = sensorValue * (15.0/ 1023.0);
113
Blynk.virtualWrite(V6, voltage);
114
int
sensorValue1 = analogRead(A1);
115
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
116
float
voltage1 = sensorValue * (100/ 1023.0);
117
Blynk.virtualWrite(V7, voltage1);
118
119
120
}
121
BLYNK_CONNECTED()
122
{
123
Blynk.syncVirtual(V0);
124
125
}
126
BLYNK_WRITE (V0)
127
128
{
129
130
int
rele = param.asInt();
131
digitalWrite (RELE, rele);
132
}
133
134
void
buttonLedWidget()
135
{
136
// Read button
137
boolean isPressed = (digitalRead(btnPin) == LOW);
138
139
// If state has changed...
140
if
(isPressed != btnState) {
141
if
(isPressed) {
142
led3.off();
143
}
else
{
144
led3.on();
145
}
146
btnState = isPressed;
147
}
148
}
149
150
151
152
153
void
loop
()
154
{
155
Blynk.run();
156
if
(millis()> Time1 + 3000) detection(), Time1 = millis();
// выполняем функцию detection () каждые 10 сек
157
if
(millis()> Time2 + 2000) buttonLedWidget(), Time2 = millis();
// выполняем функцию detection () каждые 10 сек
158
timer.run();
159
160
}
отвечаю
Подскажите почему при нажатии кнопки в блинк не всегда срабатывает пин ардуино вот скетч
ваш код из лупа
1
if
(millis()> Time1 + 3000) detection(), Time1 = millis();
// выполняем функцию detection () каждые 10 сек
даю подсказку 3000 милисекунд это надо перевести в секунды
и подумать как часто вызывается эта функция.....
по моему както все через одно место собрано