我正在开发一个系统,其中Atmega 328充当网关,通过NRF24L01从传感器接收数据,并通过4G将其发送到Spring中的HTTP服务器。嗯,一切都很完美,直到昨天,我在Spring中的数据接收端点中编辑了一些东西,现在我的网关返回HTTP代码-2(这在标准HTTP中不存在,我查了一下,这是来自ArduinoHTTPClient库本身的代码[您正在接收HTTP响应代码-2,这意味着发送请求头1时出错])。
嗯,我测试了4G调制解调器,它有一个信号,并连接到移动的互联网网络.我测试了一个测试端点和同样的事情,代码-2.
#include <SoftwareSerial.h>
#include "RF24.h"
RF24 radio(7, 8);
const byte radio_address[6] = "00006";
#define TINY_GSM_MODEM_SIM7600
#define TINY_GSM_USE_WIFI false
#define GSM_PIN ""
#define UART_BAUD 115200
#define PIN_DTR 25
#define PIN_TX 3
#define PIN_RX 2
#define PWR_PIN 7
#define RESET_ATMEGA 6
SoftwareSerial SerialAT(PIN_RX, PIN_TX);
const char apn[] = "zap.vivo.com.br";
const char gprsUser[] = "vivo";
const char gprsPass[] = "vivo";
#include <TinyGsmClient.h>
#include <ArduinoHttpClient.h>
#define TINY_GSM_USE_GPRS true
TinyGsm modem(Serial);
//AWS Spring Server Host
const char server[] = "******************.compute.amazonaws.com";
const char resource[] = "/data/register";
const int port = 8080;
const char resourceTest[] = "/data/test";
const uint8_t cid = 1;
TinyGsmClient client(modem);
HttpClient http(client, server, port);
int g = 0;
bool connectedToNetwork = false;
#define TRANSMISSION_DATA_PACKAGE 5
struct __attribute__((__packed__)) Data {
char type; // 'D' para Data
char key[6];
float rms[3];
float temperature;
} data;
struct __attribute__((__packed__)) VibrationPackage {
char type; // 'V' para VibrationPackage
char key[6];
float dataPackage[TRANSMISSION_DATA_PACKAGE];
int start;
int end;
} vibrationPackage;
void initGSM() {
if (!connectedToNetwork) {
SerialAT.print("Waiting for network...");
if (!modem.waitForNetwork()) {
SerialAT.println(" fail");
delay(10000);
return;
}
SerialAT.println(" success");
connectedToNetwork = true;
if (modem.isNetworkConnected()) {
SerialAT.println("Network connected");
}
}
if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {
SerialAT.println("fail");
return;
}
g = 1;
}
void setup() {
pinMode(RESET_ATMEGA, OUTPUT);
digitalWrite(RESET_ATMEGA, HIGH);
Serial.begin(115200);
SerialAT.begin(UART_BAUD);
pinMode(PWR_PIN, OUTPUT);
digitalWrite(PWR_PIN, LOW);
delay(100);
digitalWrite(PWR_PIN, HIGH);
delay(1000);
digitalWrite(PWR_PIN, LOW);
SerialAT.println("Wait...");
delay(11000);
SerialAT.println("Initializing modem...");
if (!modem.init()) {
SerialAT.println("Failed to restart modem, delaying 10s and retrying");
return;
}
if (GSM_PIN && modem.getSimStatus() != 3) {
modem.simUnlock(GSM_PIN);
}
if (!radio.begin()) {
SerialAT.println(F("[ERROR] Radio hardware is not responding..."));
while (1) {}
}
radio.setPALevel(RF24_PA_MAX);
radio.setDataRate(RF24_250KBPS);
radio.setChannel(76);
radio.setCRCLength(RF24_CRC_16);
radio.openReadingPipe(1, radio_address);
radio.startListening();
}
void httpRequest(String json) {
SerialAT.println("");
SerialAT.println("");
SerialAT.println("making POST request");
SerialAT.println(json);
http.beginRequest();
http.sendHeader("Connection", "keep-alive");
http.sendHeader("User-Agent", "ArduinoHttpClient");
http.sendHeader("Accept", "*/*");
http.sendHeader("Accept-Encoding", "gzip, deflate");
http.sendHeader("HTTP-Version", "HTTP/1.1");
http.sendHeader("Host", server);
http.sendHeader("Content-Type", "application/json");
http.sendHeader("Content-Length", json.length());
http.post(resource);
http.beginBody();
http.print(json);
http.endRequest();
http.stop();
int statusCode = http.responseStatusCode();
SerialAT.print("HTTP Response Code: ");
SerialAT.println(statusCode);
}
//unsigned long previousMillis = 0;
//const unsigned long interval = 180000;
void (*resetFunc)(void) = 0;
void loop() {
if (g == 0)
initGSM();
//unsigned long currentMillis = millis();
//if (currentMillis - previousMillis >= interval) {
//SerialAT.println(F("Reset"));
//resetFunc();
//previousMillis = currentMillis;
//}
uint8_t pipe;
if (radio.available(&pipe)) {
SerialAT.println("Res ");
SerialAT.print("Recieved ");
int size = radio.getDynamicPayloadSize();
SerialAT.print(size);
SerialAT.println(" bytes on pipe");
byte packet[size];
radio.read(&packet, size);
if (packet[0] == 'D') {
memcpy(&data, &packet, sizeof(data)); //0 | Type 1-6 | Key
String dataJson = "";
dataJson += "{\"type\":\"";
dataJson += data.type;
dataJson += "\",\"key\":\"";
dataJson += data.key;
dataJson += "\",\"rms\":[";
dataJson += data.rms[0];
dataJson += ",";
dataJson += data.rms[1];
dataJson += ",";
dataJson += data.rms[2];
dataJson += "],\"temperature\":";
dataJson += data.temperature;
dataJson += "}";
httpRequest(dataJson);
} else {
memcpy(&vibrationPackage, &packet, sizeof(vibrationPackage));
String vibrationJson = "";
vibrationJson += "{\"type\":\"";
vibrationJson += vibrationPackage.type;
vibrationJson += "\",\"key\":\"";
vibrationJson += vibrationPackage.key;
vibrationJson += "\",\"dataPackage\":[";
for (int i = 0; i < TRANSMISSION_DATA_PACKAGE; i++) {
vibrationJson += vibrationPackage.dataPackage[i];
if (i < TRANSMISSION_DATA_PACKAGE - 1) {
vibrationJson += ",";
}
}
vibrationJson += "\",\"start\":\"";
vibrationJson += vibrationPackage.start;
vibrationJson += "\",\"end\":\"";
vibrationJson += vibrationPackage.end;
vibrationJson += "]}";
httpRequest(vibrationJson);
}
}
}
字符串
x1c 0d1x的数据
@RestController
@RequestMapping("/data")
public class DataController {
@Autowired
private DataRepository repository;
@Autowired
private VibrationPackageRepository vibrationPackageRepository;
@Autowired
private ClientRepository clientRepository;
@Autowired
private AssetRepository assetRepository;
@Autowired
private ApplicationContext applicationContext;
@PostMapping("/register")
public ResponseEntity<String> register(@RequestBody String object) {
System.out.println("JSON Chegou!");
try {
ObjectMapper objectMapper = new ObjectMapper();
JsonNode requestBody = objectMapper.readTree(object);
if (requestBody.has("key")) {
String assetKey = requestBody.get("key").asText();
Optional<Asset> assetOptional = assetRepository.findByKey(assetKey);
if (assetOptional.isPresent()) {
Asset asset = assetOptional.get();
if (requestBody.has("type")) {
String objectType = requestBody.get("type").asText();
switch (objectType) {
case "D":
DataRequest dataRequest = objectMapper.treeToValue(requestBody, DataRequest.class);
System.out.println("Objeto do tipo DataRequest: " + dataRequest.toString());
Data data = dataRequest.getData();
// Run FFT
Analyzer analyzer = new Analyzer(
asset.getDataList(),
asset.getVibrationPackages(),
asset,
applicationContext
);
asset.getVibrationPackages().clear();
data.setAsset(asset);
repository.save(data);
assetRepository.save(asset);
break;
case "P":
VibrationPackageRequest vibrationPackageRequest = objectMapper.treeToValue(requestBody,
VibrationPackageRequest.class);
System.out.println("Objeto do tipo VibrationPackage: " + vibrationPackageRequest.toString());
VibrationPackage vibrationPackage = vibrationPackageRequest.getVibrationPackage(asset);
if (asset.getVibrationPackages().size() > 0) {
if (asset.getVibrationPackages().get(0).getStart() == 0) {
vibrationPackage.setAsset(asset);
vibrationPackageRepository.save(vibrationPackage);
} else {
asset.getVibrationPackages().clear();
assetRepository.save(asset);
}
} else if (vibrationPackage.getStart() == 0)
vibrationPackageRepository.save(vibrationPackage);
break;
default:
System.out.println("Tipo de objeto desconhecido: " + objectType);
return ResponseEntity.badRequest().build();
}
} else {
System.out.println("Campo 'type' não encontrado no JSON: " + requestBody);
return ResponseEntity.badRequest().build();
}
}
}
} catch (Exception e) {
System.out.println("JSON inválido: " + object);
e.printStackTrace();
return ResponseEntity.badRequest().build();
}
return ResponseEntity.ok().build();
}
}
型
我不知道发生了什么事,就像我说的,昨天它是工作的。我已经对服务器进行了更改,但没有什么会导致这一点。
在服务器上使用Postman进行测试:
的
的
编辑:我添加了以下片段:
http.post(resource);
if (http.connected()) {
SerialAT.println("Connected to server");
} else {
SerialAT.println("Connection to server failed");
}
型
我收到信息说我没有连接到服务器
1条答案
按热度按时间u5i3ibmn1#
我只是忘了支付互联网lol