1722浏览
查看: 1722|回复: 4

[ESP8266/ESP32] FireBeetle 和 CubeCopper 交互的例子

[复制链接]
之前介绍过一个 3D 制作软件:CopperCube,它的特点是上手非常简单。这次制作一个例子,可以使得它生成的 EXE和外部发生交互。我们通过外部的两个开关能够控制软件上的两个球体是否发光。
基本的原理是:使用 FireBeetle实现一个 WebServer,然后编写一个 CopperCubeScript,在代码种访问这个 WebServer 来获得信息。
首先看一下FireBeetle的代码:
  1. #include <WiFi.h>
  2. #include <WiFiClient.h>
  3. #include <WebServer.h>
  4. #include <ESPmDNS.h>
  5. const char* ssid = " YOURSSID";
  6. const char* password = "PASSWORD";
  7. WebServer server(80);
  8. void handleRoot() {
  9.    char str[3];
  10.    if (digitalRead(16)==LOW) {
  11.            str[0]='2';
  12.    } else {
  13.            str[0]='1';
  14.    }
  15.    if (digitalRead(17)==LOW) {
  16.            str[1]='4';
  17.    } else {
  18.            str[1]='3';
  19.    }   
  20.    str[2]=0;
  21.    Serial.println(str);
  22.    server.send(200, "text/plain", str);
  23. }
  24. void handleNotFound() {
  25.   String message = "File Not Found\n\n";
  26.   message += "URI: ";
  27.   message += server.uri();
  28.   message += "\nMethod: ";
  29.   message += (server.method() == HTTP_GET) ? "GET" : "POST";
  30.   message += "\nArguments: ";
  31.   message += server.args();
  32.   message += "\n";
  33.   for (uint8_t i = 0; i < server.args(); i++) {
  34.     message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  35.   }
  36.   server.send(404, "text/plain", message);
  37. }
  38. void setup(void) {
  39.   pinMode(16,INPUT_PULLUP);
  40.   pinMode(17,INPUT_PULLUP);
  41.   
  42.   Serial.begin(115200);
  43.   WiFi.mode(WIFI_STA);
  44.   WiFi.begin(ssid, password);
  45.   Serial.println("");
  46.   // Wait for connection
  47.   while (WiFi.status() != WL_CONNECTED) {
  48.     delay(500);
  49.     Serial.print(".");
  50.   }
  51.   Serial.println("");
  52.   Serial.print("Connected to ");
  53.   Serial.println(ssid);
  54.   Serial.print("IP address: ");
  55.   Serial.println(WiFi.localIP());
  56.   if (MDNS.begin("esp32")) {
  57.     Serial.println("MDNS responder started");
  58.   }
  59.   server.on("/", handleRoot);
  60.   server.on("/inline", []() {
  61.     server.send(200, "text/plain", "this works as well");
  62.   });
  63.   server.onNotFound(handleNotFound);
  64.   server.begin();
  65.   Serial.println("HTTP server started");
  66.   
  67.   
  68. }
  69. void loop(void) {
  70.   server.handleClient();
  71.   delay(2);//allow the cpu to switch to other tasks
  72. }
复制代码

上面的代码会根据当前按钮状态输出不同的数据,通过浏览器可以访问到,这样调试也很方便。

  1. var HttpRequest=256;
  2. var Frame=0;
  3. function finishedRequest(dataReceived)
  4. {
  5.   //print("finished request! Data size:" + dataReceived.length);
  6.   //print("contains:[" + dataReceived+"]");
  7.   if (dataReceived.search("1")!=-1) {
  8.         cube = ccbGetSceneNodeFromName("Light1");       
  9.         ccbSetSceneNodeProperty(cube, "Color", new vector3d(1, 0, 0));
  10.   }
  11.   if (dataReceived.search("2")!=-1) {
  12.         cube = ccbGetSceneNodeFromName("Light1");       
  13.         ccbSetSceneNodeProperty(cube, "Color", new vector3d(1, 1, 1));
  14.   }
  15.   if (dataReceived.search("3")!=-1) {
  16.         cube = ccbGetSceneNodeFromName("Light2");       
  17.         ccbSetSceneNodeProperty(cube, "Color", new vector3d(0, 1, 0));
  18.   }
  19.   if (dataReceived.search("4")!=-1) {
  20.         cube = ccbGetSceneNodeFromName("Light2");       
  21.         ccbSetSceneNodeProperty(cube, "Color", new vector3d(1, 1, 1));
  22.   }  
  23. }
  24. function onFrameDrawing()
  25. {
  26.         if (Frame==100) {
  27.                 HttpRequest=ccbDoHTTPRequest("http://192.168.1.24/", finishedRequest);
  28.                 Frame=0;
  29.         } else { Frame++; }
  30.         if (HttpRequest==0) {
  31.                 //
  32.         }
  33.    
  34. }
  35. ccbRegisterOnFrameEvent(onFrameDrawing);
复制代码
需要注意的是代码中访问了一个 IP,这个是 Firebeetle 运行时路由器分配给它的IP,具体可以在串口调试信息中看到,每次可能会有所不同。

  1. ccbDoHTTPRequest("http://192.168.1.24/", finishedRequest);
复制代码


最终,测试的视频在:


对应的代码如下:



三春牛-创客  初级技神

发表于 2023-7-28 22:30:16

厉害厉害
回复

使用道具 举报

三春牛-创客  初级技神

发表于 2023-7-28 22:32:16

赞赞赞赞赞
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-7-29 21:22:24

不错不错
回复

使用道具 举报

花生编程  中级技匠

发表于 2023-7-29 21:23:26

厉害厉害
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail