This IOT research work is the working part of the program Change the Wi-Fi ssid and password and program STM32l475 board to see the result on the terminal (C# GUI)
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Revision 37:b7acef59086c, committed 2021-02-23
- Comitter:
- saileshtimilsena
- Date:
- Tue Feb 23 20:03:58 2021 +0000
- Parent:
- 36:2d0820b53217
- Commit message:
- Updated Version for the Research Work...; Change the Wi-Fi ssid and password and program STM32L475 board and see the result in GUI with graph
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Feb 19 16:16:56 2021 +0000
+++ b/main.cpp Tue Feb 23 20:03:58 2021 +0000
@@ -20,24 +20,7 @@
#include "mbed.h"
#include "simple-mbed-cloud-client.h"
#include "LittleFileSystem.h"
-
-#include "stdbool.h" //for stepper motor function
-
-#define STEPPER_PIN_1 PA_15 //ARD.D9-PWM PA15
-#define STEPPER_PIN_2 PA_2 //ARD.D10-PWM PA2
-#define STEPPER_PIN_3 PA_7 //ARD.D11-PWM PA7
-#define STEPPER_PIN_4 PA_6 //ARD.D12-PWM PA6
-
-DigitalOut steeperOne(STEPPER_PIN_1);
-DigitalOut steeperTwo(STEPPER_PIN_2);
-DigitalOut steeperThree(STEPPER_PIN_3);
-DigitalOut steeperFour(STEPPER_PIN_4);
-
-DigitalOut myIOs(PB_14); // review the results on PB_14
-DigitalOut myIOs2(PA_5); // review the results on PA_5
-int step_number=0;
-int open_flag=0;
-int close_flag=0;
+#include<math.h>
// Default network interface object. Don't forget to change the WiFi SSID/password in mbed_app.json if you're using WiFi.
NetworkInterface *net;
@@ -72,8 +55,9 @@
static DevI2C devI2c(PB_11,PB_10);
static HTS221Sensor sen_hum_temp(&devI2c);
static LPS22HBSensor sen_press_temp(&devI2c);
+//static LSM6DSLSensor sen_acc_gyro(&devI2c,LSM6DSL_ACC_GYRO_I2C_ADDRESS_LOW,PD_11);
+
static DigitalOut shutdown_pin(PC_6);
-//static VL53L0X sen_distance(&devI2c, &shutdown_pin, PC_7);
// Temperature reading from microcontroller
AnalogIn adc_temp(ADC_TEMP);
@@ -88,7 +72,9 @@
#ifdef SEND_ALL_SENSORS
MbedCloudClientResource *res_humidity;
MbedCloudClientResource *res_pressure;
-MbedCloudClientResource *res_adc_temp;
+MbedCloudClientResource *res_temperature;
+
+
#endif /* SEND_ALL_SENSORS */
// An event queue is a very useful structure to debounce information between contexts (e.g. ISR and normal threads)
@@ -122,87 +108,21 @@
}
printf("\n");
}
-//Serial port define for uart1 usb
-//pb7 rx
-//pb6 tx
-//Serial device(USBTX, USBRX);
-Serial device(PB_6, PB_7); // tx, rx
-
/**
* Button function triggered by the physical button press.
*/
-
-
-
-
- void Tx_interrupt();
-void Rx_interrupt();
-void send_line();
-void read_line();
-
-
-// Circular buffers for serial TX and RX data - used by interrupt routines
-const int buffer_size = 255;
-// might need to increase buffer size for high baud rates
-char tx_buffer[buffer_size+1];
-char rx_buffer[buffer_size+1];
-// Circular buffer pointers
-// volatile makes read-modify-write atomic
-volatile int tx_in=0;
-volatile int tx_out=0;
-volatile int rx_in=0;
-volatile int rx_out=0;
-// Line buffers for sprintf and sscanf
-char tx_line[80];
-char rx_line[80];
-
- int i=0;
- int rx_i=0;
- device.baud(115200);
-
-// Setup a serial interrupt function to receive data
- device.attach(&Rx_interrupt, Serial::RxIrq);
-// Setup a serial interrupt function to transmit data
- device.attach(&Tx_interrupt, Serial::TxIrq);
-
-
void button_press() {
int v = res_button->get_value_int() + 1;
res_button->set_value(v);
printf("*** Button clicked %d times \n", v);
}
-
// Called everytime a new character goes into
// the RX buffer. Test that character for \n
// Note, rxGetLastChar() gets the last char that
// we received but it does NOT remove it from
// the RX buffer.
-void read_line() {
- int i;
- i = 0;
-// Start Critical Section - don't interrupt while changing global buffer variables
- NVIC_DisableIRQ(UART1_IRQn);
-// Loop reading rx buffer characters until end of line character
- while ((i==0) || (rx_line[i-1] != '\r')) {
-// Wait if buffer empty
- if (rx_in == rx_out) {
-// End Critical Section - need to allow rx interrupt to get new characters for buffer
- NVIC_EnableIRQ(UART1_IRQn);
- while (rx_in == rx_out) {
- }
-// Start Critical Section - don't interrupt while changing global buffer variables
- NVIC_DisableIRQ(UART1_IRQn);
- }
- rx_line[i] = rx_buffer[rx_out];
- i++;
- rx_out = (rx_out + 1) % buffer_size;
- }
-// End Critical Section
- NVIC_EnableIRQ(UART1_IRQn);
- rx_line[i-1] = 0;
- return;
-}
+
/**
* Notification callback handler
* @param resource The resource that triggered the callback
@@ -221,82 +141,11 @@
endpointInfo = endpoint;
}
-/*
- for one rotation when passed true or false in function OneStep(bool)
-*/
-void OneStep(bool dir){
-if(dir)
-{
- switch(step_number){
- case 0:
- steeperOne =1;
- steeperTwo =0;
- steeperThree =0;
- steeperFour =0;
- break;
- case 1:
- steeperOne =0;
- steeperTwo =1;
- steeperThree =0;
- steeperFour =0;
- break;
- case 2:
- steeperOne =0;
- steeperTwo =0;
- steeperThree =1;
- steeperFour =0;
- break;
- case 3:
- steeperOne =0;
- steeperTwo =0;
- steeperThree =0;
- steeperFour =1;
- break;
- }// end of switch
-}// end of if
-
-else
-{
- switch(step_number){
- case 0:
- steeperOne =0;
- steeperTwo =0;
- steeperThree =0;
- steeperFour =1;
- break;
- case 1:
- steeperOne =0;
- steeperTwo =0;
- steeperThree =1;
- steeperFour =0;
- break;
- case 2:
- steeperOne =0;
- steeperTwo =1;
- steeperThree =0;
- steeperFour =0;
- break;
- case 3:
- steeperOne =1;
- steeperTwo =0;
- steeperThree =0;
- steeperFour =0;
- break;
-
-
- }// end of switch
- }// end of else
-step_number++;
- if(step_number > 3){
- step_number = 0;
- }
-} // end of OneStep() function
/**
* Initialize sensors
*/
void sensors_init() {
uint8_t id1, id2;
-
printf ("\nSensors configuration:\n");
// Initialize sensors
sen_hum_temp.init(NULL);
@@ -305,13 +154,12 @@
/// Call sensors enable routines
sen_hum_temp.enable();
sen_press_temp.enable();
-
+
sen_hum_temp.read_id(&id1);
sen_press_temp.read_id(&id2);
printf("HTS221 humidity & temperature = 0x%X\n", id1);
printf("LPS22HB pressure & temperature = 0x%X\n", id2);
-
printf("\n"); ;
}
@@ -320,55 +168,28 @@
* This function is called periodically.
*/
void sensors_update() {
- float temp3_value, humid_value, pressure_value = 0.0;
-
- sen_hum_temp.get_humidity(&humid_value);
- sen_press_temp.get_pressure(&pressure_value);
- temp3_value = adc_temp.read()*100;
-
- printf("%2.0f^%2.0f^%3.0f",temp3_value,humid_value,pressure_value);
- printf("\n");
-
- // printf ("%02d : %02d : %02d\n", temp3_value, hummitly, pressure);
+ float humid_value, pressure_value = 0.0;
+ float temp1_value = 0.0;
+ //float temp3_value = 0.0;
-// added a new code for stepper motor
-// if temperature reading is higher, open motor
- if(temp3_value > 30)
- {
- open_flag = 0;
- while(open_flag==0){
- OneStep(false);
- wait(0.01);
- bool btn_pressed = (button.read() == MBED_CONF_APP_BUTTON_PRESSED_STATE);
- if (btn_pressed) {
- printf("Door Opened...\n");
- open_flag=1;
- close_flag=0;
- }//end of if(btn_pressed)
- }// end of while
- }// end of if(temp3_value>20)
- // now we expect to close
+ sen_hum_temp.get_humidity(&humid_value);
+ sen_hum_temp.get_temperature(&temp1_value);
+ sen_press_temp.get_pressure(&pressure_value);
+ //temp3_value = adc_temp.read()*100;
+ //sen_acc_gyro.get_g_axes(g_axes);
+
+ printf("%2.2f^%2.1f^%3.2f",temp1_value,humid_value,pressure_value);
+ printf("\n");
- if(temp3_value < 20)//door has to close
- {
- close_flag = 0;
- while(close_flag==0){
- OneStep(true);
- wait(0.01);
- bool btn_pressed = (button.read() == MBED_CONF_APP_BUTTON_PRESSED_STATE);
- if (btn_pressed) {
- printf("Door Closed...\n");
- open_flag=0;
- close_flag=1;
- }//end of if(btn_pressed)
- }// end of while
- }
-
+ wait_us(4000);//Wait until the loop_timer reaches 4000us (250Hz) before starting the next loop
+
if (endpointInfo) {
#ifdef SEND_ALL_SENSORS
res_humidity->set_value(humid_value);
+ res_temperature->set_value(temp1_value);
res_pressure->set_value(pressure_value);
- res_adc_temp->set_value(temp3_value);
+ //res_adc_temp->set_value(temp3_value);
+
#endif /* SEND_ALL_SENSORS */
}
}
@@ -444,26 +265,21 @@
#ifdef SEND_ALL_SENSORS
// Sensor resources
-/* res_temperature = client.create_resource("3303/0/5700", "Temperature HTS221 (C)");
+ res_temperature = client.create_resource("3303/0/5700", "Temperature HTS221 (C)");
res_temperature->set_value(0);
res_temperature->methods(M2MMethod::GET);
- res_temperature->observable(true);*/
+ res_temperature->observable(true);
res_humidity = client.create_resource("3304/0/5700", "Humidity");
res_humidity->set_value(0);
res_humidity->methods(M2MMethod::GET);
res_humidity->observable(true);
- res_adc_temp = client.create_resource("3303/2/5700", "Temperature ADC (C)");
- res_adc_temp->set_value(0);
- res_adc_temp->methods(M2MMethod::GET);
- res_adc_temp->observable(true);
-
res_pressure = client.create_resource("3323/0/5700", "Pressure");
res_pressure->set_value(0);
res_pressure->methods(M2MMethod::GET);
res_pressure->observable(true);
-
+
#endif /* SEND_ALL_SENSORS */
printf("Initialized Pelion Client. Registering...\n");
@@ -478,7 +294,7 @@
while (i-- > 0 && !client.is_client_registered()) {
wait_ms(100);
}
-
+
button.fall(eventQueue.event(&button_press));
// The timer fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations