Как использовать команду 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());
}

, 👍-1

Обсуждение

Пожалуйста, приложите описание/схему того, что и где прикреплено. И является ли SD-кард-ридер частью Sim7100 shield или extra. Если щит какой делают и печатают. если дополнительные детали, то какие детали. А как вы хотите написать в C:/data.txt на компьютере? Сформулируйте задачу, что вы хотите сделать, в логических шагах, @Codebreaker007

В "data.txt-я иду в EFS по ftp с сервера, и я хочу отправить этот файл на SD-карту., @Ali Morawej


2 ответа


0

Руководство 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


0

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

Вы убедились, что 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