spring Arduino + 4G HTTP请求返回码-2(ArduinoHTTPClient +调制解调器GSM)

zf2sa74q  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(126)

我正在开发一个系统,其中Atmega 328充当网关,通过NRF24L01从传感器接收数据,并通过4G将其发送到Spring中的HTTP服务器。嗯,一切都很完美,直到昨天,我在Spring中的数据接收端点中编辑了一些东西,现在我的网关返回HTTP代码-2(这在标准HTTP中不存在,我查了一下,这是来自ArduinoHTTPClient库本身的代码[您正在接收HTTP响应代码-2,这意味着发送请求头1时出错])。
嗯,我测试了4G调制解调器,它有一个信号,并连接到移动的互联网网络.我测试了一个测试端点和同样的事情,代码-2.

  1. #include <SoftwareSerial.h>
  2. #include "RF24.h"
  3. RF24 radio(7, 8);
  4. const byte radio_address[6] = "00006";
  5. #define TINY_GSM_MODEM_SIM7600
  6. #define TINY_GSM_USE_WIFI false
  7. #define GSM_PIN ""
  8. #define UART_BAUD 115200
  9. #define PIN_DTR 25
  10. #define PIN_TX 3
  11. #define PIN_RX 2
  12. #define PWR_PIN 7
  13. #define RESET_ATMEGA 6
  14. SoftwareSerial SerialAT(PIN_RX, PIN_TX);
  15. const char apn[] = "zap.vivo.com.br";
  16. const char gprsUser[] = "vivo";
  17. const char gprsPass[] = "vivo";
  18. #include <TinyGsmClient.h>
  19. #include <ArduinoHttpClient.h>
  20. #define TINY_GSM_USE_GPRS true
  21. TinyGsm modem(Serial);
  22. //AWS Spring Server Host
  23. const char server[] = "******************.compute.amazonaws.com";
  24. const char resource[] = "/data/register";
  25. const int port = 8080;
  26. const char resourceTest[] = "/data/test";
  27. const uint8_t cid = 1;
  28. TinyGsmClient client(modem);
  29. HttpClient http(client, server, port);
  30. int g = 0;
  31. bool connectedToNetwork = false;
  32. #define TRANSMISSION_DATA_PACKAGE 5
  33. struct __attribute__((__packed__)) Data {
  34. char type; // 'D' para Data
  35. char key[6];
  36. float rms[3];
  37. float temperature;
  38. } data;
  39. struct __attribute__((__packed__)) VibrationPackage {
  40. char type; // 'V' para VibrationPackage
  41. char key[6];
  42. float dataPackage[TRANSMISSION_DATA_PACKAGE];
  43. int start;
  44. int end;
  45. } vibrationPackage;
  46. void initGSM() {
  47. if (!connectedToNetwork) {
  48. SerialAT.print("Waiting for network...");
  49. if (!modem.waitForNetwork()) {
  50. SerialAT.println(" fail");
  51. delay(10000);
  52. return;
  53. }
  54. SerialAT.println(" success");
  55. connectedToNetwork = true;
  56. if (modem.isNetworkConnected()) {
  57. SerialAT.println("Network connected");
  58. }
  59. }
  60. if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
  61. SerialAT.println("fail");
  62. return;
  63. }
  64. g = 1;
  65. }
  66. void setup() {
  67. pinMode(RESET_ATMEGA, OUTPUT);
  68. digitalWrite(RESET_ATMEGA, HIGH);
  69. Serial.begin(115200);
  70. SerialAT.begin(UART_BAUD);
  71. pinMode(PWR_PIN, OUTPUT);
  72. digitalWrite(PWR_PIN, LOW);
  73. delay(100);
  74. digitalWrite(PWR_PIN, HIGH);
  75. delay(1000);
  76. digitalWrite(PWR_PIN, LOW);
  77. SerialAT.println("Wait...");
  78. delay(11000);
  79. SerialAT.println("Initializing modem...");
  80. if (!modem.init()) {
  81. SerialAT.println("Failed to restart modem, delaying 10s and retrying");
  82. return;
  83. }
  84. if (GSM_PIN && modem.getSimStatus() != 3) {
  85. modem.simUnlock(GSM_PIN);
  86. }
  87. if (!radio.begin()) {
  88. SerialAT.println(F("[ERROR] Radio hardware is not responding..."));
  89. while (1) {}
  90. }
  91. radio.setPALevel(RF24_PA_MAX);
  92. radio.setDataRate(RF24_250KBPS);
  93. radio.setChannel(76);
  94. radio.setCRCLength(RF24_CRC_16);
  95. radio.openReadingPipe(1, radio_address);
  96. radio.startListening();
  97. }
  98. void httpRequest(String json) {
  99. SerialAT.println("");
  100. SerialAT.println("");
  101. SerialAT.println("making POST request");
  102. SerialAT.println(json);
  103. http.beginRequest();
  104. http.sendHeader("Connection", "keep-alive");
  105. http.sendHeader("User-Agent", "ArduinoHttpClient");
  106. http.sendHeader("Accept", "*/*");
  107. http.sendHeader("Accept-Encoding", "gzip, deflate");
  108. http.sendHeader("HTTP-Version", "HTTP/1.1");
  109. http.sendHeader("Host", server);
  110. http.sendHeader("Content-Type", "application/json");
  111. http.sendHeader("Content-Length", json.length());
  112. http.post(resource);
  113. http.beginBody();
  114. http.print(json);
  115. http.endRequest();
  116. http.stop();
  117. int statusCode = http.responseStatusCode();
  118. SerialAT.print("HTTP Response Code: ");
  119. SerialAT.println(statusCode);
  120. }
  121. //unsigned long previousMillis = 0;
  122. //const unsigned long interval = 180000;
  123. void (*resetFunc)(void) = 0;
  124. void loop() {
  125. if (g == 0)
  126. initGSM();
  127. //unsigned long currentMillis = millis();
  128. //if (currentMillis - previousMillis >= interval) {
  129. //SerialAT.println(F("Reset"));
  130. //resetFunc();
  131. //previousMillis = currentMillis;
  132. //}
  133. uint8_t pipe;
  134. if (radio.available(&pipe)) {
  135. SerialAT.println("Res ");
  136. SerialAT.print("Recieved ");
  137. int size = radio.getDynamicPayloadSize();
  138. SerialAT.print(size);
  139. SerialAT.println(" bytes on pipe");
  140. byte packet[size];
  141. radio.read(&packet, size);
  142. if (packet[0] == 'D') {
  143. memcpy(&data, &packet, sizeof(data)); //0 | Type 1-6 | Key
  144. String dataJson = "";
  145. dataJson += "{\"type\":\"";
  146. dataJson += data.type;
  147. dataJson += "\",\"key\":\"";
  148. dataJson += data.key;
  149. dataJson += "\",\"rms\":[";
  150. dataJson += data.rms[0];
  151. dataJson += ",";
  152. dataJson += data.rms[1];
  153. dataJson += ",";
  154. dataJson += data.rms[2];
  155. dataJson += "],\"temperature\":";
  156. dataJson += data.temperature;
  157. dataJson += "}";
  158. httpRequest(dataJson);
  159. } else {
  160. memcpy(&vibrationPackage, &packet, sizeof(vibrationPackage));
  161. String vibrationJson = "";
  162. vibrationJson += "{\"type\":\"";
  163. vibrationJson += vibrationPackage.type;
  164. vibrationJson += "\",\"key\":\"";
  165. vibrationJson += vibrationPackage.key;
  166. vibrationJson += "\",\"dataPackage\":[";
  167. for (int i = 0; i < TRANSMISSION_DATA_PACKAGE; i++) {
  168. vibrationJson += vibrationPackage.dataPackage[i];
  169. if (i < TRANSMISSION_DATA_PACKAGE - 1) {
  170. vibrationJson += ",";
  171. }
  172. }
  173. vibrationJson += "\",\"start\":\"";
  174. vibrationJson += vibrationPackage.start;
  175. vibrationJson += "\",\"end\":\"";
  176. vibrationJson += vibrationPackage.end;
  177. vibrationJson += "]}";
  178. httpRequest(vibrationJson);
  179. }
  180. }
  181. }

字符串
x1c 0d1x的数据

  1. @RestController
  2. @RequestMapping("/data")
  3. public class DataController {
  4. @Autowired
  5. private DataRepository repository;
  6. @Autowired
  7. private VibrationPackageRepository vibrationPackageRepository;
  8. @Autowired
  9. private ClientRepository clientRepository;
  10. @Autowired
  11. private AssetRepository assetRepository;
  12. @Autowired
  13. private ApplicationContext applicationContext;
  14. @PostMapping("/register")
  15. public ResponseEntity<String> register(@RequestBody String object) {
  16. System.out.println("JSON Chegou!");
  17. try {
  18. ObjectMapper objectMapper = new ObjectMapper();
  19. JsonNode requestBody = objectMapper.readTree(object);
  20. if (requestBody.has("key")) {
  21. String assetKey = requestBody.get("key").asText();
  22. Optional<Asset> assetOptional = assetRepository.findByKey(assetKey);
  23. if (assetOptional.isPresent()) {
  24. Asset asset = assetOptional.get();
  25. if (requestBody.has("type")) {
  26. String objectType = requestBody.get("type").asText();
  27. switch (objectType) {
  28. case "D":
  29. DataRequest dataRequest = objectMapper.treeToValue(requestBody, DataRequest.class);
  30. System.out.println("Objeto do tipo DataRequest: " + dataRequest.toString());
  31. Data data = dataRequest.getData();
  32. // Run FFT
  33. Analyzer analyzer = new Analyzer(
  34. asset.getDataList(),
  35. asset.getVibrationPackages(),
  36. asset,
  37. applicationContext
  38. );
  39. asset.getVibrationPackages().clear();
  40. data.setAsset(asset);
  41. repository.save(data);
  42. assetRepository.save(asset);
  43. break;
  44. case "P":
  45. VibrationPackageRequest vibrationPackageRequest = objectMapper.treeToValue(requestBody,
  46. VibrationPackageRequest.class);
  47. System.out.println("Objeto do tipo VibrationPackage: " + vibrationPackageRequest.toString());
  48. VibrationPackage vibrationPackage = vibrationPackageRequest.getVibrationPackage(asset);
  49. if (asset.getVibrationPackages().size() > 0) {
  50. if (asset.getVibrationPackages().get(0).getStart() == 0) {
  51. vibrationPackage.setAsset(asset);
  52. vibrationPackageRepository.save(vibrationPackage);
  53. } else {
  54. asset.getVibrationPackages().clear();
  55. assetRepository.save(asset);
  56. }
  57. } else if (vibrationPackage.getStart() == 0)
  58. vibrationPackageRepository.save(vibrationPackage);
  59. break;
  60. default:
  61. System.out.println("Tipo de objeto desconhecido: " + objectType);
  62. return ResponseEntity.badRequest().build();
  63. }
  64. } else {
  65. System.out.println("Campo 'type' não encontrado no JSON: " + requestBody);
  66. return ResponseEntity.badRequest().build();
  67. }
  68. }
  69. }
  70. } catch (Exception e) {
  71. System.out.println("JSON inválido: " + object);
  72. e.printStackTrace();
  73. return ResponseEntity.badRequest().build();
  74. }
  75. return ResponseEntity.ok().build();
  76. }
  77. }


我不知道发生了什么事,就像我说的,昨天它是工作的。我已经对服务器进行了更改,但没有什么会导致这一点。
在服务器上使用Postman进行测试:




编辑:我添加了以下片段:

  1. http.post(resource);
  2. if (http.connected()) {
  3. SerialAT.println("Connected to server");
  4. } else {
  5. SerialAT.println("Connection to server failed");
  6. }


我收到信息说我没有连接到服务器

u5i3ibmn

u5i3ibmn1#

我只是忘了支付互联网lol

相关问题