久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4419|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于esp8266控制oled系統(tǒng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:727210 發(fā)表于 2020-6-7 09:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

本來(lái)是寫(xiě)在CSDN上的,,這里也發(fā)一份:


主要利用esp8266,結(jié)合oled,舵機(jī)和LED進(jìn)行控制,利用的是tcp協(xié)議,通過(guò)連接熱點(diǎn)實(shí)現(xiàn)對(duì)于小燈和舵機(jī)的亮滅,亮度,轉(zhuǎn)速和控制,并在oled上實(shí)時(shí)顯示。共耗時(shí)半天,希望都能有所收獲


下面是網(wǎng)絡(luò)調(diào)試助手和arduino的端串口的收發(fā)消息

然后是一些調(diào)試過(guò)程的實(shí)拍記錄:


連接上路由器:
初始界面
顯示制作人:
發(fā)送數(shù)據(jù)打開(kāi)小燈:

下面是代碼可供大家調(diào)試

  1. /*************************************************************
  2.   ESP8266 with 0.96inch OLED 引腳
  3.       VCC    <--->    VCC
  4.       GND    <--->    GND
  5.       SDA    <--->    SDA(2)  D4
  6.       SCL    <--->    SCL(14)  D5      
  7. *************************************************************/
  8. /*僅僅針對(duì)四個(gè)引腳和oled屏顯示*/
  9. //針對(duì)串口顯示oled屏幕
  10. /*****************oled設(shè)置庫(kù) *****************/
  11. #include <ArduinoJson.h>
  12. #include <U8g2lib.h>
  13. #include <Wire.h>
  14. #include <Ticker.h>
  15. /*****************網(wǎng)絡(luò)設(shè)置庫(kù) *****************/
  16. #include <ESP8266WiFi.h>        
  17. #include <WiFiClient.h>
  18. /*****************舵機(jī)庫(kù) *****************/
  19. #include <Servo.h>
  20. Servo myservo;  // 定義舵機(jī)對(duì)象,最多八個(gè)
  21. /*****************網(wǎng)絡(luò)設(shè)置項(xiàng) *****************/
  22. const char *STAssid ="xxx";                   //需要連接路由器的名稱
  23. const char *STApassword="xxxx";      //路由器的密碼
  24. const char *host= "xxxx";              /本地服務(wù)器ip
  25. const int httpPort = 8888;                    //服務(wù)器端口
  26. WiFiClient client;                            //聲明客戶端對(duì)象
  27. bool is=0;                                    //用來(lái)做連接到服務(wù)器后,僅發(fā)送一次問(wèn)候語(yǔ)

  28. int led=13;                                   //燈io,D7
  29. int led_light=12;                            //用來(lái)調(diào)節(jié)亮度,D6,輸出PWM波

  30. float dutycycle=512/2;                          /* 設(shè)置初始占空比為50% /2*/
  31. int motor_speed=1;                                    //定義舵機(jī)的轉(zhuǎn)速
  32. int pos = 0;                                   // 定義舵機(jī)轉(zhuǎn)動(dòng)位置

  33. boolean flag = true;                             //用來(lái)控制oled屏幕的刷新

  34. //oled設(shè)置
  35. // JSON
  36. DynamicJsonBuffer jsonBuffer(256); // ArduinoJson V5

  37. // 顯示屏  如果引腳不同需要在這里修改
  38. U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 14, /* data=*/ 2);  

  39. // B 站 API 網(wǎng)址: follower, view, likes
  40. String NAME = "夏友";  //改成自己的名字
  41. String UID  = "xxxxxxxxxx";  //改成自己的UID
  42. //小燈、電機(jī)狀態(tài)設(shè)置
  43. String led_sta="off";
  44. String motor_sta="off";


  45. void setup() {
  46.   Serial.begin(115200);
  47.   Serial.println("");

  48.   //LED初始化
  49.   pinMode(13,OUTPUT);
  50.   digitalWrite(13,0);  
  51.   analogWrite(led_light, dutycycle);  /* 設(shè)置初始占空比為50% /2*/

  52.   //WiFi初始化
  53.   WiFi.mode(WIFI_STA);                       //設(shè)置為STA模式
  54.   WiFi.begin(STAssid, STApassword);          //配置連接信息,開(kāi)始連接
  55.   //運(yùn)行自定義函數(shù),在未連接到路由器的過(guò)程中,打印輸出......,直到連接成功   
  56.   gotoWifi();  

  57.   // OLED 初始化,顯示連接WiFi
  58.   u8g2.begin();
  59.   u8g2.enableUTF8Print();
  60.   u8g2.clearDisplay();
  61.   u8g2.setFont(u8g2_font_wqy12_t_gb2312a);
  62.   u8g2.setCursor(10, 10);
  63.   u8g2.println("Wifi connecting to ");
  64.   u8g2.setCursor(10, 30);
  65.   u8g2.println(STAssid);
  66.   u8g2.setCursor(10, 50);
  67.   while( WiFi.status() != WL_CONNECTED ){
  68.       delay(500);
  69.       u8g2.println("。");
  70.       u8g2.println(" ");      
  71.   }
  72.   //delay(1000);
  73.   u8g2.sendBuffer();
  74.   delay(5000);   //初始化延時(shí)5秒鐘之后準(zhǔn)備顯示第二組畫(huà)面  

  75.   
  76.   //連接WiFi成功后的oled路由器顯示
  77.   u8g2.clearDisplay();
  78.   u8g2.setCursor(10,10);
  79.   u8g2.println("Wifi Connected!");
  80.   u8g2.setCursor(10,30);
  81.   u8g2.println("IP:");
  82.   u8g2.setCursor(10,50);
  83.   u8g2.println(WiFi.localIP() );

  84.   
  85.   Serial.println("連接路由器成功");
  86.   //此時(shí)已經(jīng)連接到路由器,可以開(kāi)始連接遠(yuǎn)程服務(wù)器   
  87.   lianjie();   
  88.   u8g2.sendBuffer();
  89.   delay(5000);   //初始化延時(shí)5秒鐘之后準(zhǔn)備顯示第二組畫(huà)面  
  90.   

  91.   //第三組畫(huà)面準(zhǔn)備顯示
  92.   u8g2.clearDisplay();
  93.   u8g2.setFont(u8g2_font_wqy12_t_gb2312a);
  94.   u8g2.setCursor(10, 19);
  95.   u8g2.print("Powered by");
  96.   u8g2.setCursor(10, 31);
  97.   u8g2.print("CSDN@夏友");
  98.   u8g2.setFont(u8g2_font_wqy12_t_gb2312a);
  99.   u8g2.setCursor(10, 50);
  100.   u8g2.print("csdn-summer_bird");
  101.   u8g2.sendBuffer();
  102.   delay(5000);   //初始化延時(shí)5秒鐘之后準(zhǔn)備顯示第二組畫(huà)面

  103.    //再次初始化
  104.   u8g2.setFont(u8g2_font_wqy12_t_gb2312b);

  105. }

  106. void loop() {   
  107. /****************檢測(cè)WiFi連接狀態(tài)****************/
  108.   if (WiFi.status() != WL_CONNECTED) {
  109.     WiFi.disconnect();
  110.     WiFi.begin(STAssid, STApassword);
  111.     gotoWifi();  
  112.   }
  113.   else{
  114.     if (!client.connected()) {            //如果沒(méi)有連接到服務(wù)器
  115.       lianjie();
  116.       return;
  117.     }
  118.     else{                                //否則,就是連接到服務(wù)器
  119.       if(is==0){
  120.         client.print("hello,server");
  121.         is=1;      
  122.       }
  123.     }
  124.   }

  125.   /*針對(duì)信息對(duì)oled屏幕上的信息進(jìn)行刷新并且顯示*/
  126.   String data_led_motor=Read_Tcp();    //記錄LED和舵機(jī)的數(shù)據(jù)
  127.   Tcp_Handler(data_led_motor);              //讀取服務(wù)器信息,并處理

  128.   
  129.    while(flag)                         //oled數(shù)據(jù)顯示
  130.    {   
  131.     Serial.print("data_led_motor is:");
  132.     Serial.println(data_led_motor);
  133.     // display data
  134.     Serial.println("count = 0, display data");
  135.     u8g2.firstPage();
  136.     do
  137.     {
  138.       display(data_led_motor, led_sta, motor_sta);        //分別輸出占空比,小燈亮度,舵機(jī)強(qiáng)度
  139.     } while (u8g2.nextPage());flag=false;
  140.    }

  141.    //Tcp_Handler(data_led_motor);              //讀取服務(wù)器信息,并處理************************
  142. }


  143. //讀取服務(wù)器信息,返回String類(lèi)型
  144. String Read_Tcp(){
  145.   String data = "";         
  146.   while (client.available() > 0){
  147.    
  148.     char inchar = client.read();      //
  149.     data += char(inchar);
  150.     delay(10);   
  151.     flag=true;  //修改
  152.   }
  153.   return data;
  154. }

  155. //處理服務(wù)器信息
  156. void Tcp_Handler(String data){
  157.   if(data!=""){
  158.     Serial.print("收到服務(wù)器信息:");
  159.     Serial.println(data);
  160. //數(shù)據(jù)接收處理
  161.     /*舵機(jī)數(shù)據(jù)接收處理函數(shù)*/
  162.     if(data=="led_open"){
  163.       digitalWrite(13,1);  
  164.       led_sta="on";
  165.       client.print("open led");     
  166.     }
  167.     else if(data=="led_close"){
  168.       digitalWrite(13,0);
  169.       led_sta="off";
  170.       client.print("close led");      
  171.     }
  172.     else if(data=="more"){
  173.       more();
  174.       client.print("led_light_more");
  175.     }
  176.     else if(data=="lower"){
  177.       lower();
  178.       client.print("led_light_lower");
  179.     }
  180.     /*舵機(jī)數(shù)據(jù)接收處理函數(shù)*/
  181.     else if(data=="motor_open"){
  182.       motor_speed=1;
  183.       driver(motor_speed);
  184.       motor_sta="on";
  185.       client.print("open motor");      
  186.     }
  187.     else if(data=="motor_close"){
  188.       motor_speed=0;
  189.       driver(motor_speed);
  190.       motor_sta="off";
  191.       client.print("close motor");      
  192.     }
  193.     else if(data=="faster"){     
  194.       driver(motor_speed++);
  195.       client.print("motor_faster");
  196.     }
  197.     else if(data=="slower"){
  198.       driver(motor_speed--);
  199.       client.print("motor_slower");
  200.     }
  201.   }  
  202. }
  203. //連接路由器
  204. void gotoWifi(){
  205.   while (WiFi.status() != WL_CONNECTED) {
  206.     delay(500);   
  207.     Serial.print(".");
  208.   }
  209. }
  210. //連接服務(wù)器
  211. void lianjie() {
  212.   Serial.println("開(kāi)始連接服務(wù)器");
  213.   client.connect(host, httpPort);
  214.   delay(1000);
  215. }
  216. //小燈亮度提高
  217. void more(){
  218.   dutycycle+=100;
  219.   if(dutycycle > 1023) {dutycycle = 1023;Serial.print("light_max");}/* 限制占空比至 1023,并提出警告 */  
  220.   led_sta="on";
  221.   Serial.print("Duty Cycle: ");  Serial.println(dutycycle/1024*100);
  222.   analogWrite(led_light, dutycycle);
  223.   delay(1000);
  224. }
  225. //小燈亮度降低
  226. void lower(){
  227.   dutycycle-=100;
  228.   if(dutycycle < 0) {dutycycle = 0;led_sta="off";Serial.print("light_min");}/* 限制占空比至 1,并提出警告 */  
  229.                                                  //小燈狀態(tài)需要時(shí)刻監(jiān)視
  230.   Serial.print("Duty Cycle: ");  Serial.println(dutycycle/1024*100);
  231.   analogWrite(led_light, dutycycle);
  232.   delay(1000);
  233. }

  234. //舵機(jī)轉(zhuǎn)速處理函數(shù)
  235. // 0到180旋轉(zhuǎn)舵機(jī),每次延時(shí)15毫秒
  236. void driver(int motor_speed)
  237. {
  238.   //速度控制函數(shù)
  239.    if(motor_speed>10){motor_speed = 10;motor_sta="on";Serial.print("speed_max");}/* 限制轉(zhuǎn)速0-10,并提出警告 */
  240.    else if(motor_speed<0){motor_speed = 0;motor_sta="off";Serial.print("speed_min");}/* 限制轉(zhuǎn)速0-10,并提出警告 */
  241.    
  242.     for(pos = 0; pos < 180; pos += motor_speed)  
  243.    {  
  244.       myservo.write(pos);  
  245.       delay(15);
  246.     }
  247.     // 180到0旋轉(zhuǎn)舵機(jī),每次延時(shí)15毫秒
  248.     for(pos = 180; pos>=1; pos-=motor_speed)
  249.     {                              
  250.       myservo.write(pos);
  251.       delay(15);
  252.     }
  253. }
  254.    
  255. //oled顯示函數(shù)
  256. // OLED 顯示數(shù)據(jù)
  257. void display(String data_led_motor, String led_sta, String motor_sta)
  258. {
  259.   
  260.   Serial.println("ok");
  261.   u8g2.clearDisplay();
  262.   u8g2.setCursor(5, 11);
  263.   u8g2.print("接收數(shù)據(jù):" + data_led_motor);
  264.   u8g2.setCursor(5, 27);
  265.   u8g2.print("pwm占空比:" + String(dutycycle/1024*100));
  266.   u8g2.setCursor(5, 41);
  267.   u8g2.print("舵機(jī)速度:" + String(motor_speed));
  268.   u8g2.setCursor(5, 54);
  269.   u8g2.print("小燈/舵機(jī)狀態(tài):" + led_sta + "/" + motor_sta);
  270.    
  271. }
復(fù)制代碼


源程序我也放到了網(wǎng)盤(pán),有需要的自取
網(wǎng)址:https://pan.baidu.com/s/14K37j_AizKk3m3WKlg7p9A
提取碼:xwoj



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:419900 發(fā)表于 2020-6-11 12:02 | 只看該作者
我正需要,謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩美香港a一级毛片免费 国产综合av | 视频一二三区 | 日韩在线播放网址 | 一级网站 | 99精品网| 一本在线 | 夜夜爆操| 久久久久久久久91 | 精品一区二区三区四区在线 | 午夜精品一区二区三区在线视频 | 伊人久久精品一区二区三区 | 免费一看一级毛片 | 九九精品网| 成人国产网站 | 毛片免费观看视频 | 精品欧美激情精品一区 | 中文字幕欧美一区二区 | 91大神在线资源观看无广告 | 一区二区三区四区在线 | 黄a在线观看 | 欧美综合在线观看 | 麻豆va| 国产a视频| 欧美一区二区久久 | 午夜影院网站 | 天天色官网 | 国产精品一卡二卡三卡 | 日本不卡一区二区三区在线观看 | 久久99精品久久久久久 | 九七午夜剧场福利写真 | 性一交一乱一伦视频免费观看 | 精品视频一区二区在线观看 | 中文字幕在线国产 | 粉嫩av久久一区二区三区 | 国产精品久久久久久久久久久久久 | 国产一级片 | 九九亚洲精品 | 国产福利精品一区 | 亚洲午夜av| 日韩欧美在线免费观看视频 | av黄色免费在线观看 |