SIM800 не отвечает на АТ команды

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016
Всем доброго времени суток.
 Нужна помощ по модулю SIM800.
 Вообщем дело обстоит так.. подключаю его от блока питания компа 12 вольт через понижающий шилд, 
 подаю 4.10 вольта при поиске сети 4.09 вольт, тоесть отлично без просадок.
 После включения светодеод мигает быстро после чего медленнее (сеть нашел). 
 Сигнальные ТХ к RX а RX к ТХ ( пробовал и через делитель и на прямую) к пинам №18,19 на ардуино мега . ну и земли соединил.
 
залил скетч :
01#include <SoftwareSerial.h>
02SoftwareSerial mySerial(19, 18); // RX, TX
03void setup() {
04  Serial.begin(19200);  //Скорость порта для связи Arduino с компьютером
05  Serial.println("Goodnight moon!");
06  mySerial.begin(19200);  //Скорость порта для связи Arduino с GSM модулем
07  mySerial.println("AT");
08}
09  
10void loop() {
11  if (mySerial.available())
12    Serial.write(mySerial.read());
13  if (Serial.available())
14    mySerial.write(Serial.read());
15}
 так вот при открытие монитора порт выставил скорость и новая строка, и мне приходит сообщение "Goodnight moon!" из скетча, и все...
 пишу в монитор порта AT, ничего никакой реакции, также пробовал ATI  тоже реакции 0.
 
что я не так сделал дайте идею кто знает?  и еще  один из контактов слота симкарты както странно припаян, припоя не видно на нем,
 а прозвонить незнаю как , и может ли не работать АТ команды из за этого контакта?
 
Кто знает отзовитесь пож... Заранее спасибо

 

Jatixo
Offline
Зарегистрирован: 13.01.2016

У меня тоже держатель сим на вид плохо припаян, но работает. Да и у Вас видимо тоже работает, раз сеть находит, да и без симки должны AT идти.

А в мониторе порта внизу рядом со скоростью стоит "Новая строка"?

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

да "Новая строка" выставлена, скетч правильный залит ?

Jatixo
Offline
Зарегистрирован: 13.01.2016

Да правильный, проверяйте подключение, может RX-TX перепутали, получается у Вас 19 пин должен идти на TX модуля, а 18 на RX. И как правильно заметили нужен хотя бы делитель напряжения (хотя в даташите рекомендуются транзисторы), так как у ардуины 5В, а там надо 2,8В, для RX ардуины вообще не хватает, так как там от 3В считается 1, но это примерно, на самом деле работает, я сделал делитель для TX ардуины, а для RX просто резистор небольшой на 39 Ом (такой нашел), хотя пишут ничего не надо, итак не хватает же, но на всякий случай, а делитель из резисторов 1кОм и ~1,2кОм (из двух последовательно, одного не нашел). Но пишут и напрямую работает, но не рекомендуется... Кстати похоже из-за того что через делитель, то короткие команды работают на больших скоростях, а длинные типа чтение смс, ошибки (смс поврежденный текст приходит, хотя это получается не через делитель, а через резистор один), не сразу разобрался в чем косяк, оказалась байты другие летят иногда... убавил скорость со 115200 ниже и заработало, на 19200 так-то должно стабильно работать.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

БЕДА БЕДОЙ  не в какую не хочет отвечать, менял провода tx rx местами, с делителем и без него пробовал, ничего не отвечает

Jatixo
Offline
Зарегистрирован: 13.01.2016

Вот еще по 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).

Вот и ответ =)

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

в скетче прописал так SoftwareSerial mySerial(15, 14); // RX, TX

ну и подключил соответственно, и снова реакции 0

Jatixo
Offline
Зарегистрирован: 13.01.2016

Попробуйте 15 и 14 отключить от модуля и просто между собой замкнуть, должно то что пишите сразу появляться, так хоть ардуину проверите.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Jatixo спасибо огромно за подсказку по поиску проблемы, Вы как в воду глядели, и действительно проблема до модуля СИМ800 не дошла, а конкретннее по вашему совету замкнул рх и тх и как не странно ничего, подумал спалил контакты ... после проверки светодеодом (поморгал) оказалось что они рабочие. И вот я снова застрял, одно предположение только что библиотека SoftwareSerial не работает... возможно ли такое? или еще какие варианты могут быть ?

Jatixo
Offline
Зарегистрирован: 13.01.2016

Вряд ли библиотека, попробуйте другие пины из списка, скорость 9600, также можно arduino новую версию скачать, но это вряд ли...

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

вообщем так расскажу. на форуме нашел тему и ссылку на библиотеку AltSoftSerial  ( http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html )

Скачал, установил, там описаны контакты для этой библиотеки - являются константами, у меня на меге это 46,48. Но что то там написано про татаймер который занимает эта библиотека и возможны несовместимости с другими, какими и почему так и не понял.... мой английский очень хромает.

также опросил модуль на доступные сети, вывел мтс, билайн, мегафон а вот теле2 отсутствует, хотя на мобилке сеть полная. Не связано ли это с 3G а модуль поддерживает 2G?

И почему не работает библиотека SoftwareSerial ? есть ли у кого предположения?/

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

https://www.arduino.cc/en/Reference/Serial

там выделены Serial1, Serial2 может так и писать надо, а не myserial  и там выводы другие:)

 

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

нет при инициализации портов в библиотеке SoftwareSerial используется команда SoftwareSerial mySerial(19, 18); // RX, TX

к сожалению Ваш ответ мне не помог! 

Еще есть у кого идеи по посту #10  ?

Jatixo
Offline
Зарегистрирован: 13.01.2016

Это аппаратные serial, им softwareserial не нужно, к ним нужно обращаться также как к Serial (который к компьютеру идет), но с цифрой на конце. Пробуйте так, а также получилось, что Вы как раз все разы пробовали как раз эти порты, да еще и цифры всегда наоборот, попробуйте цифры поменять местами(и провода соответственно), а также другие порты из Software Serial.

Jatixo
Offline
Зарегистрирован: 13.01.2016

В общем пробуйте так:

01void setup() {
02  Serial.begin(19200);  //Скорость порта для связи Arduino с компьютером
03  Serial.println("Goodnight moon!");
04  Serial1.begin(19200);  //Скорость порта для связи Arduino с GSM модулем
05  Serial1.println("AT");
06}
07  
08void 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.

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

замкнул тх и рх использвал как обычный сериал все работает, подключал к 50 51 контактам через SoftwareSerial не пашет, и провода менял и так и так, не выходит, в общем пришел в кыводу что нужно заменить библиотеку SoftwareSerial , где скачать можно?

 

Jatixo
Offline
Зарегистрирован: 13.01.2016

Она вместе с Ардуино идет: https://www.arduino.cc/en/Main/Software

Попробуйте в новую папку поставить или обновить старую и оттуда Компилировать и Загрузить.

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Baks, у меня получилось.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

Так и не могу запустить ардуинку мега с библиотекой SoftwareSerial, уже пробовал другую версия компилятора скачал arduino-1.7.8, до этого работал с arduino-nightly. Контакты перемыкаю, тоесть ХТ с РХ на адуино. В общем взял пример из библиотеки 

01#include <SoftwareSerial.h>
02 
03SoftwareSerial mySerial(10, 11); // RX, TX
04 
05void 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 
15void 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}

пробовал все пины для меги (соответственно в скетче тоже менял) и скорасть менял, не помогает.

Подскажите пожалуйсто как запустить эту библиатеку, что можно еще проверить ?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Поменяйте местами пины 11 и 10.

1SoftwareSerial mySerial(11, 10); // RX, TX

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

не помогло, выводит только Goodnight moon 

есть еще идеи? идеи иссякли у меня :(

gena
Offline
Зарегистрирован: 04.11.2012
dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

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.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

dr.lmg с сериалом все отлично работает, на всех трех, весь вопрос в том что библиотека SoftwareSerial не в какую не хочет заработать на моей ардуинке 

"Baks, у Вас MEGA2560?" и да вы правы. пока использую не обычный сериал а библиотеку AltSoftSerial . она работает нормально. а вот с SoftwareSerial не на каких пинах не запускается. может чтото с таймером?

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Ну с другими если работает, то и фиг с ней, с этот библиотекой. Что в ней такого, что нужно обязательно использовать ее?

У меня библиотека relay8 конфликтовала с одной из других библиотек. Но ошибок не было, протсо не работала и все.

Я ее переместил в самый верх, над остальными, и все заработало. Попробуйте подключать SoftSerial самым первым. И самым последним.

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

хотел использовать библиотеку SIM800 а она использует SoftwareSerial вот в чем вся загвостка переписывать очень страшно, и думаю очень долго будет, а проверяю я какраз тестовым скетчем там только одна она и используется #18

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016
Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

так он тоже эту библиотеку использут значит и работать не будет

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Так попробуйте, прежде чем утверждать :)

dr.lmg
dr.lmg аватар
Offline
Зарегистрирован: 07.01.2016

Baks, проблему я так понял решили? Расскажите в чем она была?

Dron
Offline
Зарегистрирован: 17.06.2016

Всем доброго времени суток.

Кое-что по работе с SIM800L есть здесь:

http://arduino.ru/forum/proekty/gsm-sistema-kontrolya-za-avtomaticheskim...

Все работает как часы.

Votmax
Offline
Зарегистрирован: 18.06.2016

У меня аналогичная проблема была. Не стал использовать SoftwareSerial, все повесил на аппоратный RX TX. Плюс ко всему скорость работы  SIM800 была по умолчанию настроена на 115200, а я пробовал и 9600 и 4800 и т.д.  И в результате, все работает как часы)))

Marsohod
Offline
Зарегистрирован: 21.12.2016

Я походу знаю в чем дело!!!! Но не знаю как исправить (((

У меня поначалу модуль бодро отвечал на все команды, но не отправлял СМС (скетч использовал из шапки).

Потом я нашел вот такой код для сетапа:

 

 

  mySerial.println("AT+CLIP=1");  //включаем АОН

  delay(100);

  mySerial.println("AT+CMGF=1");  //режим кодировки СМС - обычный (для англ.)

  delay(100);

  mySerial.println("AT+CSCS=\"GSM\"");  //режим кодировки текста

  delay(100);

 

СМСки стали улетать но модуль перестал отвечать на команды (хотя продолжает их выполнять).

Как вернуть все обратно не пойму.

Marsohod
Offline
Зарегистрирован: 21.12.2016

РАЗОБРАЛСЯ!!!!

Нужно "-" источника питания повесить ещё и на GND платы ардуино. Все стало работать норм!!!!

Pashy777
Offline
Зарегистрирован: 20.05.2017

Подскажите как Вы реализовали? Схема подключения. Скетч с примером.

Marsohod
Offline
Зарегистрирован: 21.12.2016

Все забыл уже. К концу дня соберу, вспомню, пришлю.

Marsohod
Offline
Зарегистрирован: 21.12.2016

Я подключал вот так. Преобразователя небыло, использовал батарейку.

 

Скетч:

 

01#include <SoftwareSerial.h>
02SoftwareSerial mySerial(2, 3); // RX, TX
03int ch = 0;
04int led = 13;
05String val = "";
06 
07void 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 
22void 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 
56void 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}

Возможно нужно будет поэксперементировать с паузами. Можно для начала поставить поболше и опытным путем уменьшать. Мой модуль работает с приведенными здесь.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Marsohod пишет:

Я подключал вот так. Преобразователя небыло, использовал батарейку.

спалите модуль к чертовой матери.... на рх тх  можно подавать не более 2,8В !!!

делаейте сами, но не тащите сюда-  другие сожгут свой модуль и скажут вам спасибо.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

потом еще ноют - вот чтото у меня скетч не работает....   мозги не работают ни грамма..

начнете ныть что можно не по правилам и все работает  - так ходите лучше на красный свет через дорогу, но не тащите сюда такие вот "схемы".

Logik
Offline
Зарегистрирован: 05.08.2014

Short Circuit пишет:

Marsohod пишет:

Я подключал вот так. Преобразователя небыло, использовал батарейку.

спалите модуль к чертовой матери.... на рх тх  можно подавать не более 2,8В !!!

Да. Резистор в килоом-другой между Tx ардуиніы и Rx модема нужен. И запаяйте его максимально быстро, т.к. ща набегут доброжелатели и вы поставите один из вариантов:

1. Резестивный делитель.

2. транзисторный каскад.

3. спец микросхему преобразования уровней

4. оптрон

5. сельсин.

Поторопитесь!

Marsohod
Offline
Зарегистрирован: 21.12.2016

Спасибо за коментарий, но вот непонятно.

Питание GSM модуля от 3.7 в до 4.2 в. Это как раз батарейка сотового. Я же на RX/TX питание не подаю. Модуль сам формирует сигнал.

Или вы имеете в виду, что на выходах RX/TX GSM модуля уровень сигнала равен напряжению питания модуля? Или есть какая-то зависимость близкая к единице?

Информация достоверная? Очень обяжете если поясните. А то очень не хочется опять к метрологам за осциллографом с блоком переменного напряжения переться – жадные они. Но если надо схожу, графики выложу. 

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

У меня так работает: Serial.begin(2400);

 

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Marsohod пишет:

Спасибо за коментарий, но вот непонятно..............

проблема шаманства. Шаманы не читают даташиты и рекомендации в даташитах. И потом начинают шаманить,  жечь гсм модули, утверждать что  там полно загадок, они глючат, требуют пояснений и т.д.. Это все проблема шаманства.

Marsohod
Offline
Зарегистрирован: 21.12.2016

Вот спасибо за четкий ответ на вопрос. И за поучения дельные спасибо. Вот прям теперь у меня как будто глаза открылись. Всего вам хорошего, внукам вашим здоровья.

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

1) есть даташиты.

2) есть куча инфы здесь с срисунками как нужно подключать - через резисторы с диодами..

Лень искать или поиском не умеете пользоваться?

 А шаманить и претензии высказывать - уже умеете?

Pashy777
Offline
Зарегистрирован: 20.05.2017

Подскажите почему при нажатии кнопки в блинк не всегда срабатывает пин ардуино вот скетч

*******************/
#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();

}

Short Circuit
Short Circuit аватар
Offline
Зарегистрирован: 17.05.2015

Ваш скетч в таком виде никто смотреть не будет, приведите его в нормальную форму.

Pashy777
Offline
Зарегистрирован: 20.05.2017

Как залить на сайт не пойму.

Pashy777
Offline
Зарегистрирован: 20.05.2017
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 
09OneWire oneWire (ONE_WIRE_BUS);
10DallasTemperature 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>
22const int ledPin =  11;
23#define BAT_Pin A0      // на батарею, через делитель напряжения 39кОм / 11 кОм
24float m = 66.91;         // делитель для перевода АЦП в вольты
25float Vbat;              // переменная хранящая напряжение бортовой сети
26 
27 
28// You should get Auth Token in the Blynk App.
29// Go to the Project Settings (nut icon).
30const char auth[] = "66666666666";
31 
32// Your GPRS credentials
33// Leave empty, if missing user or pass
34const char apn[]  = "internet";
35const char user[] = "mts";
36const 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>
43SoftwareSerial SerialAT(2, 3); // RX, TX
44TinyGsm modem(SerialAT);
45 
46void 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 
71void 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 
93void loop()
94{
95  Blynk.run();
96    
97 
98}

 

Pashy777
Offline
Зарегистрирован: 20.05.2017

Пардон не тот скетч вот тот.

001define 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 
007OneWire oneWire (ONE_WIRE_BUS);
008DallasTemperature sensors(&oneWire);
009unsigned long Time1 = 0;
010unsigned long Time2 = 0;
011 
012#include <SimpleTimer.h>
013SimpleTimer 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).
038const char auth[] = "66";
039 
040// Your GPRS credentials
041// Leave empty, if missing user or pass
042const char apn[]  = "internet";
043const char user[] = "mts";
044const 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>
051SoftwareSerial SerialAT(2, 3); // RX, TX
052TinyGsm modem(SerialAT);
053 
054#define RELE 11
055bool rele;
056 
057 
058const int btnPin = 12;
059WidgetLED led3(V5);
060boolean btnState = false;
061 
062 
063 
064void 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 
091pinMode(RELE, OUTPUT);
092while (Blynk.connect() == false) {
093    // Wait until connected}
094     
095}
096 
097timer.setInterval(500L, buttonLedWidget);
098   
099}
100void 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}
121BLYNK_CONNECTED()
122{
123 Blynk.syncVirtual(V0);
124  
125}
126BLYNK_WRITE (V0)
127 
128{
129  
130  int rele = param.asInt();
131digitalWrite (RELE, rele);
132}
133 
134void 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 
153void loop()
154{
155  Blynk.run(); 
156if (millis()> Time1 + 3000) detection(), Time1 = millis(); // выполняем функцию detection () каждые 10 сек
157if (millis()> Time2 + 2000) buttonLedWidget(), Time2 = millis(); // выполняем функцию detection () каждые 10 сек
158  timer.run();
159  
160}

 

Baks
Baks аватар
Offline
Зарегистрирован: 11.01.2016

отвечаю

Подскажите почему при нажатии кнопки в блинк не всегда срабатывает пин ардуино вот скетч

 

ваш код из лупа

1if (millis()> Time1 + 3000) detection(), Time1 = millis(); // выполняем функцию detection () каждые 10 сек

даю подсказку 3000 милисекунд это надо перевести в секунды

и подумать как часто вызывается эта функция.....

по моему както все через одно место собрано