發表文章

目前顯示的是 5月, 2020的文章

MCU的硬體基礎知識(1)-電磁干擾 EMI

圖片
前言     冬天比較乾燥的地區,很常碰到金屬就會產生靜電,稱為EDS,通常靜電人體有感覺的電壓都有3KV~5KV,酸然時間很短暫對人體不會有影響,但對電子元件就是一個威脅了。     或是使用電鑽的時候收音機會有雜訊,這就是EFT。 為了解決這些問題,就伸出EMC(電磁兼容)這個詞 -去耦合電容 上圖是USB與供電電路,左邊接了一個470uFC16,右邊這張開關後面接了一個100uF電容C19在並聯一個0.1uFC10      -C16 C19這種大電容的作用如下:         1.緩衝功能:上電瞬間,電流不穩定容易衝擊電子元件,加上大電容可以緩衝。         2.穩定功能:整個電路中,後級零件功率大小不一,所需的電流也不一定固定,加上大電容可以減少電流的波動。      -C10這種小電容的作用如下:         1.主要用於消除高頻信號干擾,ESD EFT等,0.1uF這個值是根據各種參數總結出來的 -常見電容種類 1.電解電容 2.陶瓷電容 3.鉭質電容 電解電容體積最大,價格最便宜,其他兩種體積小價格較貴

ESP8266_RTOS - WIFI篇(2) station 模式

前言    station模式為WIFI設備中很重要的功能,station與AP的差異在上一篇比較過了,直接看程式碼 程式碼 主程式 void app_main() { ESP_ERROR_CHECK(nvs_flash_init()); ESP_LOGI(TAG, "ESP_WIFI_MODE_STA" ); wifi_init_sta(); } station 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 void wifi_init_sta ( void ) { s_wifi_event_group = xEventGroupCreate(); tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_create_default()); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init( & cfg)); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, & event_handler, NULL )); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, & event_handler, NULL )); wifi_config_t wifi_config = { .sta = { .ssid = EXAMPLE_ESP_WIFI_SSID, .password = EXAMPLE_ESP_WIFI_PASS },...

ESP8266_RTOS - WIFI篇(1) softAP

前言     softAP為WIFI模組最主要的功能之一,任何wifi產品通常都是由AP模式開始 AP模式與STATION模式簡單的區分就是: AP模式: 當ESP8266為AP模式,可以把他想像成喔個WIFI路由器,啟用時會有一個WIFI名稱,讓裝置(手機/電腦/其他設備)可以連線,連上的裝置,ESP8266就會分配一組虛擬IP給設備(通常都是192.168.x.x)。 STATION模式: 當ESP8266為station模式,就是去連AP的角色,連上後會得到一組虛擬IP AP+STATIO模式 :此模式為上述兩種的結合,使用時機通常為透過其他設備來讓ESP8266連線到其他WIFIAP 程式碼  程式碼為ESP8266_RTOS_SDK中的example,在此做個筆記 主程式 1 2 3 4 5 6 7 void app_main () { ESP_ERROR_CHECK(nvs_flash_init()); ESP_LOGI(TAG, "ESP_WIFI_MODE_AP" ); wifi_init_softap(); } ncs_flash_init()為出數默認的nvs區塊,wifi_Init_softap()為AP模式的重要副函示 副函示 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 void wifi_init_softap () { tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_create_default()); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init( & cfg)); //wifi初始化 ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, & wifi_event_handler, NULL )); wif...

ESP8266_RTOS - 儲存篇(3) spiffs文件系統

前言   spiffs是一個用於SPI NOR FLAH設備的文件系統,支持磨損均衡與文件系統一致的功能。 雖然是文件系統,不過目前不支持目錄 程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 void app_main ( void ) { ESP_LOGI(TAG, "Initializing SPIFFS" ); esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs" , .partition_label = NULL , .max_files = 5 , .format_if_mount_failed = true }; // Use settings defined above to initialize and mount SPIFFS filesystem. // Note: esp_vfs_spiffs_register is an all-in-one convenience function. esp_err_t ret = esp_vfs_spiffs_register( & conf); if (ret != ESP_OK) { if (ret == ESP_FAIL) { ESP_LOGE(TAG, "Failed to mount or format filesystem" ); } else if (ret == ESP_ERR_NOT_FOUND) { ...

ESP8266_RTOS - 儲存篇(2) nvs 操作 nvs_set&vs_get

前言 Non-volatile storage(NVS) NVS庫主要用於在flash中儲存鑑值格式的數據,NVS也是基於flash(read/write/erase)做的處理 詳情請看官方文檔: 文檔 程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 void nvs_write_data_to_flash ( void ) { nvs_handle handle; static const char * NVS_CUSTOMER = "date1" ; static const char * DATA1 = "param1" ; static const char * DATA2 = "param2" ; static const char * DATA3 = "param3" ; int32_t value_for_store = 666 ; wifi_config_t wifi_config_to_store = { .sta = { .ssid = "ssid:hello_YEE" , .password = "password:12345678" , }, }; printf( "set size:%u \r\n " , sizeof (wifi_config_to_store)); ESP_ERROR_CHECK( nvs_open( NVS_CUSTOMER, NVS_READWRITE, & handle) ); ESP_ERROR_CHECK( nvs_set_str( handle, DATA1, "i am a string." ) ); ESP_ERROR_CHECK( nvs_set_i32( handle, DATA2, value...

ESP8266_RTOS - 儲存篇(1) spi_flash_write& spi_flash_read

圖片
   前言      要做一個專案,儲存是一個很重要的功能,目前據我所了解的,ESP8266有3種方式可以用: 直接寫入flash nvs spiffs 此篇為flash的讀寫筆記 正文 可以看到有三個函式可以用,分別為: spi_flash_erase_sector spi_flash_write spi_flash_read 要注意的是flash的使用,是以 4K 為一個單位進行讀寫 程式碼 用結構(struct)儲存在flash #include <esp_spi_flash.h> //一定要加 ================= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 static void setup_tests () { if (start == 0 ) { start = 0x7C * 4 * 1024 ; printf( "Test data partition @ 0x%x \n " , start); } } typedef struct test{ int a; int b; }TT; void test () { setup_tests(); spi_flash_erase_sector(start); TT tet = { .a = 123 , .b = 666 }; ESP_ERROR_CHECK(spi_flash_write(start,( uint8_t * ) & tet, sizeof ( struct test))); TT read = { 0 }; ESP_ERROR_CHECK(spi_flash_read(start,( uint8_t * ) & read, sizeof ( struct test))); } --------------------------- 上述程式碼中,第23行與26行中  ( uint8_t * )一定要加,不加會crash!!

ESP8266_RTOS - UART 篇 將log改到uart1

圖片
    此篇為筆記如何將esplog訊息從默認的uart0換到uart1     下圖可以看到esp8266有兩組uart,分別是uart0跟uart1 腳位分別為        -UART0: GPIO1(U0TXD) GPIO3(U0RXD)      -UART1: GPIO2(U1TXD) 也就是說另一組UART是沒有rx功能的,拿來當LOG剛剛好 設定步驟 make menuconfig  --> Component config --> Common ESP-related --> UART for console output(Defauot:UART0,TX=GPIO1,TX=GPIO3)  --> 改成CUSTOM UART periphera to use for console output(0-1)(UART0)  --> 改成UART1 設定baud rate: (74880)UART console baud rate  --> 改成自己要的baud rate   即可完成

ESP8266_RTOS -使用esp-idf下,新增子資料夾的步驟

圖片
   專案開始前先做一些準備會更方便,寫專案一定有一個需求就是用不同的資料夾將眾多.c檔功能或需求分開放,方便閱讀與維護。     由於CMAKE並沒有很熟,閱讀官方文章與摸索後才將其完成,在這裡小小做個筆記  -官方文章    需要修改的文件就是 CMakeLists.txt、component.mk以及 ESP8266_RTOS_SDK/make/project.mk 這幾個資料夾內的參數 --------------------------------------------------------------------------------- 先將hello_world專案從examples中拉到ESP8266_RTOS_SDK中: 在hello_world中新增一個資料夾 test 新增檔案: -新增test.c -新增資料夾inc,在inc下新增一個test.h -從資料夾main中複製 CMakeLists.txt與component.mk         -新增test.c與test.h內容      用記事本打開component.mk -加上此段   COMPONENT_ADD_INCLUDEDIRS += inc  打開 ESP8266_RTOS_SDK/make/project.mk -找到 COMPONENT_DIRS -後面加上  $(PROJECT_PATH)/test        打開CMakeLists.txt -set(COMPONENT_ADD_INCLDEDIRS include inc) -------------------------------------------------------------------------------------------- 到此步驟,準備就緒 準備build c...