公網訪問樹莓派

公網訪問樹莓派控制小車

  上篇已經介紹了小車在局域網中的控制方法,比較簡單,既然是遠程遙控那就要能夠進行公網訪問,使得你的小車可以在任何有網絡的地方都能訪問到,并且后續還會加上攝像頭,進行實時監控,想一下是不是很有趣,下面進入正文。首先,如果想要遠程訪問,那就要使你的手機能在任何地方都能訪問到你樹莓派的IP。而現在我們用的IPv4,你不會有一個公共IP。所以這就需要一個中介,去買一個服務器,這樣在手機和樹莓派中間就有了一個中介,手機可以直接訪問云服務器,樹莓派也可以訪問到云服務器這樣間接地連接起了手機與樹莓派。我這里用的用的是阿里云的云服務器,9.9一個月不是很貴。買了這個云服務器后它就會給你一個公網上的IP。具體的流程就是:樹莓派與云服務器建立一個socket長連接,手機也與云服務器建立一個socket長連接。整個的連接建立起來以后不管是手機向樹莓派發送數據還是樹莓派向手機發送數據都可以輕松實現了。云服務器的python代碼:
#!/usr/bin/env python
#encoding:utf-8
import signal
import atexit
from socket import *
import sys
import time
def run_raspberry():s.listen(2)s1= socket(AF_INET, SOCK_STREAM)s1.bind(("", 2))conns,addrs=s1.accept()print 'humeiok'conn, addr = s.accept()print 'shoujiok'while 1:command= conn.recv(1024).replace('\n','')print commandif command=="forward":conns.sendall("forward")if command=="right":conns.sendall("right")if command=="left":conns.sendall("left")if command=="back":conns.sendall("back")if __name__ == '__main__':run_raspberry()
需要注意的是,要首先運行服務器的代碼,然后運行樹莓派,確保樹莓派與云服務器的socket能夠順利的建立。樹莓派的代碼要在上一篇代碼的基礎上增加一個先與云服務器取得連接的代碼,比較簡單就不寫了。
這只是一個簡單的實現方法,想增加其他的功能在上面擴展就可以了。
下一篇將做樹莓派的遠程監控。確定不關注一波???

原文:https://blog.csdn.net/ayz123456/article/details/78306042

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于對象的引用作為參數,可以直接訪問私有成員的問題

#include using namespace std; class CPoint { public:CPoint(int xx, int yy){x xx;y yy;}CPoint(const CPoint &p){x p.x;y p.y;} private:int x, y; };首先,我們來看一個例子,在CPoint這個類中定義了兩個構造函數,第一個為普通的…

僵死進程的產生以及解決辦法

本文參考自:https://baike.baidu.com/item/%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B/1036577?fraladdin 一個進程在調用exit命令結束自己的生命的時候,其實它并沒有真正的被銷毀,而是留下一個稱為僵尸進程(Zombie)的數據…

樹莓派第一次開機自動連接WIFI(不用顯示屏方法)

當我們把樹莓派系統鏡像燒錄到SD卡之后,我們在windows看到的TF卡變成了空間很小的名為boot的盤,我們在此目錄下新建一個名為wpa_supplicant.conf空白文件,并在其中加入以下代碼: countryGB ctrl_interfaceDIR/var/run/wpa_supplicant GROUPn…

樹莓派設置靜態IP的好處與壞處

網上后很多資源教初學者如何設置靜態IP,但我覺得設置靜態IP也有不好的地方: 首先,好處就是樹莓派的IP不會變,例如你設置了無線連接方式的靜態IP為192.168.1.110,那么無論你連接哪個路由器,或者連接同一個路…

關于源文件用不同的編碼方式編寫,會導致執行結果不一樣的現象及解決方法

如果我們編寫以下程序,并分別另存為ANSI和UTF-8兩種不同的編碼方式保存,放到Linux下編譯并運行如下圖,兩端相同的程序以不同的編碼方式保存編譯后的運行結果不一樣,./ansi采用ANSI編碼方式,會自動采用GBK方式來保存中文…

引入寬字符error: converting to execution character set: Invalid or incomplete multibyte or wide character

版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。 本文鏈接:https://blog.csdn.net/qq_26093511/article/details/60593240 交叉編譯.c文件,遇到如下問題 arm-linux-gcc -o…

linux交叉編譯時報錯:file not recognized: File format not recognized

版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。 本文鏈接:https://blog.csdn.net/u011113596/article/details/80325081 今天交叉編譯sqlite3,make的時候報錯:…

arm-linux-gcc靜態編譯和動態編譯的區別

很多教程會提到加上-static是靜態編譯,但對于新手來說沒有用例子來說明可能不太好理解,今天我就介紹一下關于這方面知識的一個例子: 最近在做一個關于freetype字體的東西,需要依賴freetype官方提供的庫,我已經把電腦這…

從0到1寫RT-Thread內核——線程定義及切換的實現

從0寫RT-Thread內核之線程定義及切換的實現具體可以分為以下六步來實現 一:分別定義線程棧、線程函數、線程控制塊; ALIGN(RT_ALIGN_SIZE)//設置4字節對齊 /* 定義線程棧 */ rt_uint8_t rt_flag1_thread_stack[512]; rt_uint8_t rt_flag2_thread_stack…

從0到1寫RT-Thread內核——臨界段的保護

臨界段就是一段在執行的時候不能被中斷的代碼段,在RT-Thread里,臨界段最常出現的就是對全局變量的操作(類似Linux下的鎖)。RT-Thread對臨界段的保護是直接把中斷全部關了,NMI FAULT和硬FAULT除外。下圖是3個關于中斷屏…

從0到1寫RT-Thread內核——空閑線程與阻塞延時的實現

在之前寫的另外一篇文章——<從0到1寫RT-Thread內核——線程定義及切換的實現>中線程體內的延時使用的是軟件延時&#xff0c;即還是讓CPU空等來達到延時的效果。RTOS中的延時叫阻塞延時&#xff0c;即線程需要延時的時候&#xff0c;線程會放棄CPU的使用權&#xff0c;C…

從0到1寫RT-Thread內核——支持多優先級

在本章之前&#xff0c;RT-Thread還沒有支持多優先級&#xff0c;我們手動指定了第一個運行的線程&#xff0c;并在此之后三個線程&#xff08;包括空閑線程&#xff09;互相切換&#xff0c;在本章中我們加入優先級的功能&#xff0c;第一個運行的程序是就緒列表里優先級最高的…

Linux串口阻塞與非阻塞

Linux串口編程的阻塞與否可以在open函數中設置&#xff0c;例如&#xff1a; 打開時使用&#xff1a; fd open(USAR1, O_RDWR | O_NOCTTY );//阻塞式讀寫fd open("/dev/ttyAT2",O_RDWR|O_NOCTTY|O_NDELAY); //非阻塞讀寫 除了用open函數之外還可以在open函數之…

vi中如何實現批量替換

將文件tihuan&#xff08;假設此文本中字符a&#xff09;中的所有字符a換成字符w&#xff0c;其命令為&#xff1a; 1。vi tihuan 2。按esc鍵 3。按shift&#xff1a; 4。在&#xff1a;后輸入 %s/a/w/g 其中s為&#xff1a;substitute&#xff0c;%表示所有行&#xff0c;…

C++里數組名+1和數組名的地址+1的區別

C/C里面的數組名字會退化為指針&#xff0c;所以數組名a實際指的是數組的第一個元素的地址。而數組名作為指針來講有特殊性&#xff0c;它正在它所指向的內存區域中&#xff0c;&a的值和a的數值是相同的&#xff08;可以輸出觀察一下&#xff09;&#xff0c;但是類型和意義…

棧空間和堆空間的區別

棧空間用于存儲函數參數和局部變量&#xff0c;所需空間由系統自動分配&#xff0c;回收也由系統管理&#xff0c;無需人工干預&#xff1b;堆空間用于存儲動態分配的內存塊&#xff0c;分配和釋放空間均由程序員控制&#xff0c;有可能產生內存泄漏。 棧空間作為一個嚴格后進…

AD軟件之模塊化原理圖

首先我們創建兩個原理圖文件 然后我們在Sheet2.SchDoc里放置一個頁面符并雙擊綠色的方框 選擇目標文件 我們選擇我們剛才創建的Sheet4.SchDoc 然后在 視圖——>面板——>Navigator選項 里點一下交互式導航 就可以看到Sheet4.SchDoc被添加到Sheet2.SchDoc下面了 通過上面…

進程與線程的區別(面試題)

進程與線程的區別 1.進程是資源分配最小單位&#xff0c;線程是程序執行的最小單位&#xff1b; 2..進程有自己獨立的地址空間&#xff0c;每啟動一個進程&#xff0c;系統都會為其分配地址空間&#xff0c;建立數據表來維護代碼段、堆棧段和數據段&#xff0c;線程沒有獨立的…

查找表的原理與結構 什么是競爭與冒險現象?怎樣判斷?如何消除?

查找表的原理與結構&#xff1a; 查找表&#xff08;look-up-table&#xff09;簡稱為LUT&#xff0c;LUT本質上就是一個RAM。目前FPGA中多使用4輸入的LUT&#xff0c;所以每一個LUT可以看成一個有 4位地址線的16x1的RAM。當用戶通過原理圖或HDL語言描述了一個邏輯電路以…