Skocz do zawartości

Jak odebrać informację z dowolnego urządzenia za pomocą I2C, języka C i systemu FreeRTOS


drtx_cold

Pomocna odpowiedź

Witam chciałbym się dowiedzieć jak odebrać informacje dla dowolnego urządzenia (chodzi mi o takie informacje które będą wyświetlane w konsoli sam je sobie dopasuję) za pomocą I2c w języku C za pomocą systemu FreeRTOS.

Najlepiej aby odpowiedź była skierowana dla esp (8266 lub 32)

Chciałbym odebrać informacje z akcelerometru, żyroskopu oraz barometru (jest to na module adafruit dof 10) lecz nie chce dostosowywać programu pod konkretne urządzenia chce tylko odebrać informacje żeby móc samemu w konsoli zaobserwować co się dzieje w konsoli w danej sytuacji i potem podpisać w programie 

Dziękuję za wszystkie odpowiedzi.

Na sam początek chciałem zrobić prostą inicjalizację I2C ( tutaj jest kod ) a dalej sam nie wiem za co się zabrać żeby móc odebrać informacje 😅

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/gpio.h"
#include "driver/uart.h"
#include "portmacro.h"
#include "FreeRTOSConfig.h"
#include "../build/include/sdkconfig.h"
#include <stdlib.h>
#include "driver/i2c.h"
#include "esp_err.h"
#include "esp_log.h"
//---------------------------
#include "MK_I2C.h"
#define scl 5
#define sda 4
void task1(){



	int i = 0;
	for(int h = 0;h<125;h++){

		i2c_cmd_handle_t cmd = i2c_cmd_link_create();
		i2c_master_start( cmd );
		i2c_master_write_byte(cmd, i, 1);
		i2c_master_stop( cmd );
		esp_err_t err = i2c_master_cmd_begin(0, cmd, 100);
		i2c_cmd_link_delete(cmd);

		if(err){				

		i2c_master_start( cmd );
		i2c_master_stop( cmd );
		i2c_master_cmd_begin(0, cmd, 100);
		i2c_cmd_link_delete(cmd);

		}



		i+=2;
	}
	while(1){

		vTaskDelay(100);
	}
}

void app_main()
{
	mk_I2C_init(0,5,4); //scl 5, sda 4

	printf("\n ready \n");
	xTaskCreate(task1,"task1",4080,NULL,1,NULL);
	while(1){

	}
}
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include "driver/gpio.h"
#include "driver/uart.h"
#include "portmacro.h"
#include "FreeRTOSConfig.h"
#include "../build/include/sdkconfig.h"
#include <stdlib.h>
#include "driver/i2c.h"
#include "esp_err.h"
#include "esp_log.h"
//---------------------------
#include "MK_I2C.h"

#define scl 5
#define sda 4

esp_err_t mk_I2C_init(uint8_t port_nr,uint8_t scl_pin_nr, uint8_t sda_pin_nr){
	i2c_config_t conf;
	conf.mode = I2C_MODE_MASTER;
	conf.sda_io_num = sda_pin_nr;
	conf.sda_pullup_en = 1;
	conf.scl_io_num = scl_pin_nr;
	conf.scl_pullup_en = 1;
	conf.clk_stretch_tick = 300;

	esp_err_t res1 = i2c_driver_install(0, I2C_MODE_MASTER);
	if ( res1 ) return res1;
	esp_err_t res2 = i2c_param_config(0, &conf);
	if ( res2 ) return res2;
	return ESP_OK ;
}

Edytowano przez Treker
Połączenie postów
  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.