Как использовать команду AT+CFTRANTX в SIM7100
Я работаю над проектом с использованием pro mini 8 МГц/3,3 В и SIM7100, я хочу знать, как я могу использовать команду+CFTRANTX. Я пытаюсь прочитать файл из EFS и записать его на SD-карту через последовательный порт. У меня есть некоторые данные в SD, но это мусор.
Моя плата-Arduino Pro Mini (ATmega 328) 8 МГц/3,3 В (DEV-11114), а модем-самодельная плата с модулем SIM7100, уже тестовая плата и модуль работают со всеми функциями без каких-либо проблем. Я добавил схему платы к вопросу.
Вот схема SIM7100
Вот SD-модуль, Pro Mini и схема контактов SIM7100
c:\data2.txt является: от A1 до F0
A1A2A3A4A5A6A7A8A9A0B1B2B3B4B5B6B7B8B9B0C1C2C3C4C5C6C7C8C9C0D1D2D3D4D5D6D7D8D9D0E1E2E3E4E5E6E7E8E9E0F1F2F3F4F5F6F7F8F9F0
Любая помощь будет оказана.
Код, который я использую, я опробовал со всеми возможными скоростями передачи данных:
#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
SoftwareSerial simSerial(7, 6);
File myFile;
void setup() {
Serial.begin(9600);
while (!Serial) {
;
}
simSerial.begin(9600);
Serial.print("\nInitializing SD card...");
if (!SD.begin(10)) {
Serial.println("\nInitialization failed!");
while (1);
}
Serial.println("\nInitialization done.");
delay(8000); //For booting SIM7100
if (SD.exists("1.TXT")) SD.remove("1.TXT");
myFile = SD.open("1.txt", FILE_WRITE);
if (myFile) {
simSerial.println("AT+CFTRANTX=\"c:/data.txt\"");
while (simSerial.available() > 0) {
byte voc = simSerial.read();
myFile.write(voc);
}
myFile.close();
// Serial.println("\nClose done.");
} else {
// Serial.println("Error opening 1.txt");
}
// re-open the file for reading:
myFile = SD.open("1.txt");
if (myFile) {
Serial.println("1.txt:");
while (myFile.available()) {
Serial.print(myFile.read());
}
myFile.close();
Serial.println("\nReading SD Card done.");
} else {
Serial.println("Error opening 1.txt");
}
}
void loop() {
}
Вот тестовый скетч для серийного программного и аппаратного обеспечения.
SoftwareSerial mySerial(7,6); // RX, TX
void setup()
{
Serial.begin(9600);
while (!Serial) {
;
}
Serial.println("Hardware Serial port!");
mySerial.begin(9600);
mySerial.println("AT+CFTRANTX=\"c:/data.txt\"");
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
@Ali Morawej, 👍-1
Обсуждение2 ответа
Руководство v1.02 по Sim7100 со всеми командами можно скачать здесь
Вот код для тестирования, скомпилированный для UNO без предупреждений и ошибок: Пожалуйста, протестируйте его и дайте отзыв (прочитайте комментарии, чтобы получить поток кода) Тестирование с помощью RX/TX Sim7100 на выводах 4/5 (последовательное программное обеспечение и скорость передачи данных Sim7100 до 9600):
#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
#define SD_ChipSelectPin 10
SoftwareSerial simSerial(5, 6); // RX, TX to TX RX of the SIM7100 module
//#define simSerial Serial
char receiveArray[256] = {'\0'};
void readSerialPort(uint8_t);
uint8_t counter = 0;
void setup() {
Serial.begin(57600);
while (!Serial) {
;
}
simSerial.begin(9600); // using HW Serial on a Pro Mini
while (!simSerial) {
;
}
simSerial.println("AT+IPR=9600"); // set sim7100 to same serial speed
delay(1000);
simSerial.flush(); // Flush buffer
SD.begin(SD_ChipSelectPin);
if (!SD.begin(SD_ChipSelectPin)) {
//Serial.println("Error opening SD-card");
return;
}
delay(1000);
if (SD.exists("1.TXT")) SD.remove("1.TXT");
delay(1000);
}
void loop() {
if (counter < 3) {
File saveFile = SD.open("1.TXT", FILE_WRITE);
if (saveFile) {
// This has to be the Serial the SIM7100 is attached to
simSerial.println("AT+CFTRANTX=\"c:/data.txt\"\r");
while (!simSerial.available()) {} // wait for data to arrive
readSerialPort(0);
saveFile.close();
// Serial.println("Success creating file");
} else {
// Serial.println("Error creating file");
}
counter++;
}
}
/* For a first test we print everything to 1.txt -
there will be "garbagge" as the AT response in it -
we can "clean" in a later by using the intermediate array or the counter */
void readSerialPort(uint8_t startIndex = 0) {
uint16_t i = 0; // counter and we want later to filter the first X chars
while (simSerial.available() > 0) {
char inChar = simSerial.read();
if (i >= startIndex) { // if we want to filter the first 16 chars it would be i>=16 (as it starts with 0)
if (inChar == '\n') {
receiveArray[i] = '\0'; // terminate the array
return;
}
if (inChar != '\r') {
receiveArray[i] = inChar;
i++;
}
}
}
}
Теперь код ждет ответа модема, @Codebreaker007
Попробовал код возврата пустой SD - карты., @Ali Morawej
Я перемонтировал свою плату и изменил файл данных, как указано выше, и проверил, как @ TisteAndii ведет меня в коде выше, я получил правильные данные в последовательном порядке с AT+CFTRANTX="c:/data.txt
, но получить мусор, как 000000000062480198616224 на SD-карте. Теперь моя аппаратная настройка и проводка в порядке, может быть, я помогу снова получить правильный формат на SD-карте., @Ali Morawej
Можете ли вы опубликовать последний рабочий код в своем вопросе? Конечно, я помогу тебе, @Codebreaker007
Я уже обновляю коды и образцы data2.txt, у меня есть изменение от 1 до 100, до A1A2 до F9F0, я смотрел, как изменить формат данных на SD, у меня есть тест с char и byte ничего не изменилось. но я уверен, что проводка и SoftwareSerial (7, 6) работают правильно., @Ali Morawej
используйте мою функцию readSerialPort() из моего ответа и соответствующие изменения в программе (define char array, change loop)., @Codebreaker007
Я сделал, как ты сказал, но ничего не изменилось, и моя SD-карта пуста 1.txt., @Ali Morawej
Когда возникают проблемы с началом работы с модемом, обычно лучше всего подключиться к модему в "интерактивном режиме", чтобы убедиться, что вы отправляете правильные команды и получаете правильные ответы.
Вы убедились, что UART вашего модема/модуля находится на правильном логическом уровне для непосредственного взаимодействия с вашим Pro Mini? Как насчет напряжения питания? (Разместите ссылку на продукт). Если вы закончили со всем этим, то подключите только модем к Pro Mini:
5V/3.3V -> Vcc (в зависимости от напряжения питания модуля)
D6 -> Modem TX
D7 -> Modem RX
Gnd -> Gnd
Затем загрузите в свой Pro Mini следующее:
#include <SoftwareSerial.h>
SoftwareSerial fserial(6, 7);
void setup(void)
{
Serial.begin(57600);
// Я предполагаю, что это значение по умолчанию для вашего модема
fserial.begin(115200);
Serial.println("Starting.");
}
void loop(void)
{
while (fserial.available())
Serial.write(fserial.read());
while (Serial.available())
fserial.write(Serial.read());
}
Это должно в основном передавать все, что вы отправляете с вашего последовательного монитора на модем, и, наоборот, передавать все, что модем отправляет на ваш последовательный монитор.
После загрузки скетча в Последовательном мониторе установите для строки, заканчивающейся
внизу, значение Возврата каретки
. Затем вы можете сначала отправить простой AT
и должны получить OK
от модема, чтобы подтвердить, что ваша настройка работает. Затем, чтобы проверить код чтения файла, отправьте свою команду ПО АДРЕСУ+CFTRANTX="c:/data.txt"
и посмотрим, что ты получишь.
Если вы можете подтвердить, что это работает, написание кода для автоматического выполнения должно быть намного понятнее. Или, по крайней мере, вы исключите целую кучу возможных проблем.
(Примечание: Arduino может ненадежно работать со скоростью 115200 бод на последовательном программном обеспечении. Таким образом, вы можете быстро изменить скорость передачи данных модема с помощью AT+IPREX=9600
. А затем соответствующим образом измените свой скетч и повторно загрузите его.)
@AliMorawej Какую скорость передачи данных вы видите, когда вводите " AT+IPR`?? Работает ли ваша команда "AT+CFTRANTX" с последовательного монитора?, @SoreDakeNoKoto
@AliMorawej Что именно вы изменили? Скорость передачи данных в бодах?, @SoreDakeNoKoto
@AliMorawej Итак, теперь вы можете прочитать data.txt использовать этот тестовый скетч для отправки команды?, @SoreDakeNoKoto
Да, читаю на SIM7100 команду AT без каких-либо проблем, но когда я записываю ее на SD, пропускаю данные, записываю данные A1A2A3...F9F0 и получаю на SD что-то вроде 000000000062480198616224 меняю тип данных char и байт ничего не становится лучше ..., @Ali Morawej
- Sim800l и arduino pro mini3.3 вольт
- Модуль А6 сломан?
- avrdude: stk500_getsync(): not in sync: resp=0x00
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- Ошибка "avrdude:stk500_recv(): programmer is not responding" при загрузке скетча в Arduino Pro Mini
- SIM900 3G? Или SIM900A умеет подключаться к 3G?
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
Пожалуйста, приложите описание/схему того, что и где прикреплено. И является ли SD-кард-ридер частью Sim7100 shield или extra. Если щит какой делают и печатают. если дополнительные детали, то какие детали. А как вы хотите написать в C:/data.txt на компьютере? Сформулируйте задачу, что вы хотите сделать, в логических шагах, @Codebreaker007
В "data.txt-я иду в EFS по ftp с сервера, и я хочу отправить этот файл на SD-карту., @Ali Morawej