| Форум РадиоКот https://radiokot.ru/forum/ |
|
| SIM800L запитывает Arduino в обратку через свой TX пин https://radiokot.ru/forum/viewtopic.php?f=66&t=188574 |
Страница 1 из 1 |
| Автор: | vjk7 [ Чт июн 01, 2023 04:17:16 ] |
| Заголовок сообщения: | SIM800L запитывает Arduino в обратку через свой TX пин |
Имеется Arduino Pro Micro (на Atmega32u4 которая) и модуль SIM800L, а конкретнее - тот, который красный. Модулю, как известно, нужно питание от 3.3 до 4.4 В. 5 В по моему опыту тоже вроде годится (точно помню, что модуль стартует, мигает светодиодом, ничего не сгорает) Но питать его от стабилизатора ардуины нельзя, он прожорливый (говорят, до 2 А). Да и нету в Pro Micro никакого стабилизатора. Ну и от питания самой ардуины (в т.ч. USB компа при программировании) тоже не стоит питать, 2 А для USB это предел, а еще и сама ардуина же что-то кушает. А питать его нужно от литиевого элемента, на что он и рассчитан. И в этом даже есть свой плюс: модуль поддерживает команду AT+CBC, которая позволяет определить уровень заряда аккумулятора, в процентах и в милливольтах! Весьма полезная функция для автономных устройств, чтобы делать индикацию уровня, защитное отключение\предупреждение и т.п. Но тут и начинаются проблемы. Вот я запитываю модуль от аккумулятора, подключаю его к ардуине: GND -> GND TX модуля -> RX ардуины (любой пин, на котором есть прерывания, см. документацию SoftwareSerial; в моем примере TX ардуины (вообще любой D-пин) -> RX модуля через равноплечий делитель на 2.2 кОм резисторах, чтобы 5 В понижалось до 2.5 Вот такой код: Код: #include <SoftwareSerial.h> SoftwareSerial sim(8, 9); // RX, TX bool firstSIMCommand = true; String sendSIMCommand(String cmd) { sim.println(cmd); delay(100); auto start = millis(); while (!sim.available()) { auto now = millis(); if (now - start >= 500) { Serial.println("(SIM timeout)"); return ""; } } if (firstSIMCommand) { // TODO: It removes \0 because it do not allows use indexOf() But why this \0 appears here? sim.read(); firstSIMCommand = false; } auto res = sim.readString(); auto newLine = res.indexOf("\n"); res.remove(0, newLine + 1); res.trim(); return res; } void setup() { Serial.begin(9600); while (!Serial) ; // Arduino Pro Micro / Leonardo Serial.println("Start!"); sim.begin(9600); auto res = sendSIMCommand("AT"); if (res == "OK") { Serial.println("SIM check OK"); } else { Serial.println("SIM check failed, response for AT:"); Serial.println(res); } res = sendSIMCommand("AT+CBC"); Serial.println(res); res = sendSIMCommand("AT+COPS?"); Serial.println(res); } void loop() { if (sim.available()) Serial.write(sim.read()); if (Serial.available()) sim.write(Serial.read()); } И все работает. Кроме одного. Когда ардуина отключена от USB, на ней слегка светится красный светодиод питания. То есть ардуина запитывается от модуля, несмотря на то что питание вообще-то у него отдельное. И когда я ее в таком состоянии подключаю к БП 5 В (зарядке от телефона), то она не стартует. Ведь она как бы уже была включена. И не ресетится она. А работает, только когда подключаю именно к USB-разъему компьютера Рисуется невзрачная картина. Получается в тех самых автономных устройствах мы должны модули SIM800L держать отключенными, а включает их пусть уже сама ардуина, например через релюшку? (почему-то мне нравятся 5-вольтовые электромагнитные релюшки и втыкать их тупо с D-пинов на землю, без всяких защитных диодов, и все это работает, проблем не встречал) Чтобы они не мешали ей запуститься? Но это плохо как минимум тем, что создает лишнее потребление, а ведь SIM800L и так прожорлив, вроде как. И занимает лишний пин, а пины в сложных системах на вес золота) У меня например будут заняты абсолютно все, какие только есть, кроме 3 аналоговых входов. Можно ли как-то еще решить проблему? Добавлено after 7 hours 22 minutes 9 seconds: Разобрался. Проблема в Код: while (!Serial) ; // Arduino Pro Micro / Leonardo которая добавляется на этих ардуинах для того чтобы Serial.println мог сразу в setup работать Это странно, вообще-то у меня еще другой тест был, где все то же самое, но SIM800L запитывался не от аккума, а от отдельного БП с 5 вольтами. И там я это реально ловил. Возможно из-за того что подавал на модуль не 4.4 В, а 5, тогда ведь и "обратки" будет приходить больше вольт, если она вообще есть. Ну а что касается до while !Serial, то хорошо бы разобраться с debug-режимами у ардуины и ее IDE, чтобы оно умело отличать запуск "под дебагом" (имею в виду любой запуск когда подключено по USB и будет COM-порт) и запуск когда только питание есть, а COM-порта и не должно быть. Как вариант просто таймаутить этот while )) |
|
| Автор: | Martian [ Чт июн 01, 2023 09:12:08 ] |
| Заголовок сообщения: | Re: SIM800L запитывает Arduino в обратку через свой TX пин |
5 В по моему опыту тоже вроде годится (точно помню, что модуль стартует, мигает светодиодом, ничего не сгорает) Дальше мог бы ничего и не писать.
|
|
| Автор: | roman.com [ Чт июн 01, 2023 15:31:09 ] |
| Заголовок сообщения: | Re: SIM800L запитывает Arduino в обратку через свой TX пин |
Но питать его от стабилизатора ардуины нельзя, он прожорливый (говорят, до 2 А). а взять тестер и померить ? никак ? )) Добавлено after 2 minutes 42 seconds: RX модуля через равноплечий делитель на 2.2 кОм резисторах, чтобы 5 В понижалось до 2.5 обычно все модули толерантны к 5 В... если нет то я Arduino питаю от 3,3 В... при этом делители не нужны)) Добавлено after 7 minutes 26 seconds: (почему-то мне нравятся 5-вольтовые электромагнитные релюшки и втыкать их тупо с D-пинов на землю, без всяких защитных диодов, и все это работает, проблем не встречал) В теории можно)) в Arduino есть втроеные защитные диоды... Вложение: и кстати через эти диоды ардуина и питается от SIM800L по UART при отключении USB... но в реальности рекомендуется ставить отдельные диоды... потому что встроенные слабенькие)) а вообще нормальные люди используют транзисторные ключи... типа мосфет... и т.д.
|
|
| Автор: | BOB51 [ Пт июн 02, 2023 10:22:06 ] |
| Заголовок сообщения: | Re: SIM800L запитывает Arduino в обратку через свой TX пин |
Про-мини или нанка от 3,3 гарантированно работают (там только надо учитывать активный по умолчанию BOD). Но то на меге328... А как себя ведет Pro Micro на Atmega32u4 не ведаю - не на чем проверять было - уж несоразмерно дорога по сравнению с вышеуказанными нанкой и про-мини.
|
|
| Автор: | vjk7 [ Пн июн 19, 2023 19:14:52 ] |
| Заголовок сообщения: | Re: SIM800L запитывает Arduino в обратку через свой TX пин |
Цитата: а взять тестер и померить ? никак ? )) А на каком режиме? В SIM800L - целый чипсет мобильно-телефонного типа, MediaTekовский. На каком режиме он максимум потреблять должен? Цитата: Дальше мог бы ничего и не писать. Если в рунете есть форум и там есть тема, то в ней есть сноб. Это понятно уже давным-давно. Но непонятно как быть, если китайцы один и тот же модуль делают то так, то этак, ставят то одни компоненты, то другие, у одного модуля куча производителей, а даташит только от одного доступен, и то не всегда. В такой ситуации вполне естественно, что у некого Ивана SIM800L заработал только от 5 В, а Петр прочитал статью Ивана и теперь пробует подключать его к 5, но обнаруживает, что тот и от 4.4 вообще-то работает. И да, это именно "как бы" один и тот же SIM800L, и по распиновке, и по габаритам, и по компоновке, и по цвету платы. Кстати, по этой же причине использование DIY-модулей (вместо изготовления кастомной платы) НЕ прибавляет устройствам ремонтопригодности в той мере, в какой должно. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


