|
|
|
|
@ -163,6 +163,46 @@ void onRollerManualMessage(const String &topicStr, const String &message) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool motor_parameters_retrieved = false;
|
|
|
|
|
motor_parameters_t motor_parameters[3];
|
|
|
|
|
|
|
|
|
|
motor_parameters_group_t motor_parameters_to_send;
|
|
|
|
|
|
|
|
|
|
// Handler for MQTT messages at `airseeder/set/roller[1,2,3]params`
|
|
|
|
|
// Message format: [kp] [ki] [kd] [min_duty]
|
|
|
|
|
void onRollerParamsMessage(const String &topicStr, const String &message) {
|
|
|
|
|
|
|
|
|
|
int r_id = 0;
|
|
|
|
|
|
|
|
|
|
if (topicStr == "airseeder/set/roller1params") {
|
|
|
|
|
r_id = 0;
|
|
|
|
|
} else if (topicStr == "airseeder/set/roller2params") {
|
|
|
|
|
r_id = 1;
|
|
|
|
|
} else if (topicStr == "airseeder/set/roller3params") {
|
|
|
|
|
r_id = 2;
|
|
|
|
|
} else {
|
|
|
|
|
// MQTT error
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (parse_message(message) >= 4) {
|
|
|
|
|
|
|
|
|
|
// Don't set parameters if we haven't received the existing ones yet
|
|
|
|
|
if (motor_parameters_retrieved) {
|
|
|
|
|
motor_parameters[r_id].kp = msg_segments[0].toFloat();
|
|
|
|
|
motor_parameters[r_id].ki = msg_segments[1].toFloat();
|
|
|
|
|
motor_parameters[r_id].kd = msg_segments[2].toFloat();
|
|
|
|
|
motor_parameters[r_id].min_duty = msg_segments[3].toFloat();
|
|
|
|
|
|
|
|
|
|
motor_parameters_to_send.motor_1 = motor_parameters[0];
|
|
|
|
|
motor_parameters_to_send.motor_2 = motor_parameters[1];
|
|
|
|
|
motor_parameters_to_send.motor_3 = motor_parameters[2];
|
|
|
|
|
|
|
|
|
|
set_motor_parameters(motor_parameters_to_send);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Builtin function name used by EspMQTTClient
|
|
|
|
|
void onConnectionEstablished() {
|
|
|
|
|
Serial.println("Connected to MQTT broker");
|
|
|
|
|
@ -173,6 +213,10 @@ void onConnectionEstablished() {
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller2manual", onRollerManualMessage);
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller3manual", onRollerManualMessage);
|
|
|
|
|
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller1params", onRollerParamsMessage);
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller2params", onRollerParamsMessage);
|
|
|
|
|
mqtt_client.subscribe("airseeder/set/roller3params", onRollerParamsMessage);
|
|
|
|
|
|
|
|
|
|
sprintf(msg_buffer, "%u", mqtt_client.getConnectionEstablishedCount());
|
|
|
|
|
mqtt_client.publish("airseeder/status/connect_count", msg_buffer, true);
|
|
|
|
|
}
|
|
|
|
|
@ -250,6 +294,12 @@ void loop() {
|
|
|
|
|
motor_status.motor_3_control.desired_speed, motor_status.roller_3_speed, motor_status.roller_3_revs,
|
|
|
|
|
motor_status.motor_3_duty);
|
|
|
|
|
mqtt_client.publish("airseeder/status/roller3", msg_buffer, true);
|
|
|
|
|
|
|
|
|
|
// Need to save the motor parameters somewhere, so that modification to one of them keeps the old ones
|
|
|
|
|
motor_parameters[0] = motor_status.motor_1_params;
|
|
|
|
|
motor_parameters[1] = motor_status.motor_2_params;
|
|
|
|
|
motor_parameters[2] = motor_status.motor_3_params;
|
|
|
|
|
motor_parameters_retrieved = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Periodically request a pipe pressure update via I2C
|
|
|
|
|
|