1. 程式人生 > >ESP8266/8266串列埠透傳 RTOS_SDK開發

ESP8266/8266串列埠透傳 RTOS_SDK開發

編輯工具:source insight3.5

晶片:ESP8285,內建1M FLASH 沒有外接FLASH

通過串列埠做透傳,流程是在user_main()函式初始化為STA+AP模式,新建任務,在任務中實現透傳,

透傳流程,通過串列埠一個位元組一個位元組的讀出資料,通過一個快取接受資料並通過socket用TCP傳遞給路由。

void  vTask_station( void * pvParameters )
{
    //sockt config
    LOCAL int32 sock_fd;
    struct sockaddr_in server_addr;
    int nNetTimeout = 1000;
    int fromlen;
    int ret;
    uint8 fifo_len;
    char TC_data[256] = {0};
    uint8 fifo_i = 0;
    uint8 data_i = 0;
    //ap confi

    while(wifi_station_get_connect_status() != STATION_GOT_IP)
    {
        vTaskDelay(2);
    }
    sock_fd = socket(AF_INET,  SOCK_STREAM, 0);
    if(sock_fd  < 0)
    {
        printf("ESP8266 TCP task socket > failed to create sock!\n");
        vTaskDelay(1000/portTICK_RATE_MS);
        while(1);
    }

    struct sockaddr_in servaddr;
    memset(&servaddr, 0, sizeof(servaddr));
    servaddr.sin_family = AF_INET;
    servaddr.sin_port = htons(5188);
    servaddr.sin_addr.s_addr =inet_addr("172.26.36.1");
    servaddr.sin_len = sizeof(server_addr);

    do{
        ret = connect(sock_fd, (struct sockaddr *)&servaddr, sizeof(servaddr));
        printf("connect ret = %d\n",ret);
    }while(ret < 0);
    while(1)
    {
        //讀取串列埠管道長度
         fifo_len = (READ_PERI_REG(UART_STATUS(UART0)) >> UART_RXFIFO_CNT_S)&UART_RXFIFO_CNT;
        
        //如果管道中有資料將資料快取到快取器中
        if(fifo_len > 0)
        {
            for(fifo_i = 0; fifo_i < fifo_len; fifo_i++)
            {
                TC_data[data_i] = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
                data_i++;
            }
            continue;
        }
        //讀取完成後將資料write到伺服器
        if(fifo_len == 0 && data_i >0)
        {
            write(sock_fd, TC_data, strlen(TC_data));
            memset(TC_data,0,sizeof(TC_data));
            data_i = 0;
        }
        
    }
}
第一次用的是串列埠終端傳輸,中斷傳輸的話最多接受127個位元組。任務情況下可以任意多個位元組。可能有更好的API實現方式,希望大家多多指教。

相關推薦

ESP8266/8266串列 RTOS_SDK開發

編輯工具:source insight3.5晶片:ESP8285,內建1M FLASH 沒有外接FLASH通過串列埠做透傳,流程是在user_main()函式初始化為STA+AP模式,新建任務,在任務中實現透傳,透傳流程,通過串列埠一個位元組一個位元組的讀出資料,通過一個快取

【筆記更新】ESP8266串列筆記

晶片:ESP8285環境:官方RTOS_SDK在做串列埠資料通過TCP傳送的時候會碰到客戶端沒200位元組一個包傳送,但是到server端並不是200位元組一個包収的,原因是lwip在TCP通訊的時候預設是開啟Nagle’s演算法的,這個是一種防止一直髮小包,serve端接不

STM32和樹莓派串列

目錄 樹莓派環境串列埠透傳 STM32環境串列埠透傳 最近做一個專案需要STM32和樹莓派進行串列埠通訊,實現原理如下: 第一步:使用USB轉TTL分別除錯STM32和樹莓派的串列埠透傳,確保可以通訊; 第二步:確保第一步成功後,將樹莓派和STM32連線,進行串列埠透傳。

CC2530無線RF,串列

1.前言 本文將分析一個利用CC2530實現無線串列埠,文中將會列舉部分程式碼並對CC2530的具體操作進行分析。本文的具體的內容包括以下幾個部分: CC2530是符合802.15.4標準的無線收發晶片,但是本文並沒有遵守802.15.4協議規則,在傳送過程中忽略了網路ID、源地址和目

nRF52832——基於SDK15.2 加入串列服務

【背景】:專案需求,需要手機和裝置進行藍芽雙向資料傳輸,需要在原工程基礎上加入此通訊工程,使用的是SDK15.2,而官方原始碼已經帶有使用的藍芽串列埠透傳例程,所以參照此例程,移植到現有的工程中即可。但是移植過程卻遇到非常蛋疼的事。 【移植要點】:下面主要提及要點,與SDK12.3的差異;

Arduino通過串列ESP 13板與java程式互動

Arduino通過串列埠透傳ESP13板與java程式互動 這個程式最基本的想法是用java把Arduino抽象出來,忙活了好幾天,雖然沒有達到最後的想法,但是學到了很多。 Main.java public class Main { pu

藍芽串列模組:HC-06從機

藍芽模組使用方法也比較簡單,直接串列埠操作,無需額外的庫檔案。 首先還是先看看模組長什麼樣子: 【注意藍芽的工作電壓】這個模組相容3.6-6V電壓,所以我接在5V電壓上使用。 首先是對藍芽模組進行設定,我是用TTL轉介面連線到電腦上,通過AT指令進行設

MQTT 移植STM32+GPRS(串列)(三)

昨天,去參觀了AWE(中國家電及消費電子博覽會),智慧家居,智慧插座、智慧LED燈、智慧攝像頭、智慧櫥櫃等等,大開眼界,原來這些別的公司的產品都正式投產了。還順便打聽了幾家提供雲服務的公司,他們一聽MQTT就說支援MQTT的協議,2家開發通訊模組的公司甚至直接可以提供支援

藍芽串列-從機發送與接收(整理)

1、從機通過串列埠傳送資料給主機(Notification:character4) //simpleBLEPeripheral.c //串列埠回撥函式 static void NpiSerialCallback(uint8 port,uint8 event

CC1101 433無線模組,STM8串列

前一段時間畫了一個CC1101收發小板子,但是一直沒有成功,最後發現把27nH的電感焊接成了27uH,最終導致失敗. 現在更換之後可以覆蓋我們公司所有的角落,已經夠用了. 下面是STM8程式 CC1101.C /***************************

AliOS-Things--ESP8266-linkkitapp-串列(二)

/* * Copyright (C) 2015-2017 Alibaba Group Holding Limited * * * this is a uart sample from hal uart for esp8266, and the same as other

ALIENTEK 的 ESP8266 WiFi Module 刷入韌體後出現don’t use rtc mem data錯誤或者ESP8266開啟串列不停出現亂碼的解決方案

ESP8266 WiFi Module 刷入韌體後出現don’t use rtc mem data 出現問題: 重新整理新的韌體後,出現錯誤提示:don’t use rtc mem data 或各種讀寫地址錯誤。 1、A fatal error occurred

WinCE裝置模擬器+虛擬串列+GPS模擬器搭建開發測試環境

所需軟體: 1、WinCE 5.0裝置模擬器 2、虛擬串列埠工具Virtual Serial Port Driver 6.9 3、Virace GPS 模擬器0.3.1chs 模擬環境: COM2:連線WinCE裝置模擬器 COM7:連線GPS模擬器 環境搭建步驟: 1

通過串列在主機和開發板之間傳送檔案

在主機和開發板之間傳送檔案一般可以通過網路(nfs、ftp等)和U盤,但對於一些體量比較小的檔案,通過串列埠傳輸也不失為一個比較方便的方法,畢竟除錯的時候串列埠線時常插在上面的。 minicom中提供xmodem, ymodem, zmodem等檔案傳輸協議,

8266外網 智慧配網 mqtt 控制多個8266 通訊

實現功能:一鍵配網8266mqtt 接收 傳送 掉線遺囑8266用串列埠通過mqtt傳送資料到手機手機通過mqtt傳送資料到8266串列埠所有工具程式碼在文章尾部會打包1.清空8266韌體2.下載8266支援一鍵配網的韌體3.連線串列埠 8266復位     Formatti

開源一個安卓四軸上位機+配套ESP8266 UDP串列通訊原始碼

手機APP是由匿名四軸遙控器修改而來,在原有基礎上添加了雙搖桿控制和單搖桿控制 資料通過UDP和ESP8266通訊 協議可修改 安卓app原始碼:https://github.com/Kevincooo

Android 串列藍芽通訊開發Java版本

Android串列埠BLE藍芽通訊Java版 0. 導語 我們都知道,在物聯網中,BLE藍芽是通訊裝置的關鍵裝置。在傳統的物聯網應用中,無線WIFI、藍芽和Zigbee,還有一些其他的2.4GHz的無線網絡卡等。對於一個面向物聯網的嵌入式工程師來講,

ESP8266模擬串列

GPIO初始化void ICACHE_FLASH_ATTR bluetooth_uart_init() { hw_timer_init(0, 1);//硬體定時器初始化 hw_timer_set_func(hw_test_timer_cb); hw_timer_arm(

深入淺出VC++串列程式設計--簡訊應用開發

前面數次連載我們以較長的篇幅講解了串列埠通訊的硬體原理、DOS平臺控制以及基於WIN32 API、控制元件和第三方類的串列埠程式設計。作為本系列文章的最後一次連載,本章將給出一個典型的應用例項:西門子簡訊服務模組TC35的串列埠控制。  1.簡訊控制終端  作為簡訊 (Sho

為什麼ESP8266 TCP過程會丟包?8266流控原理以及如何設定

1.為什麼ESP8266 TCP透傳過程會丟包? 因為沒有設定硬體流控。如果需要避免丟包,請設定硬體流控。透傳功能使用的是 TCP 協議,每包資料是 1460 (取決於協議棧),只要網路良好,buffer 空間沒有被消耗完,就可以不停地傳輸資料。對於透傳,串列埠接收資料