นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

ServiceMan
Ico64
Sathaya Bunratchoo
Engineer
Scientific Equipment Center, PSU
ความเคลื่อนไหวล่าสุด
เครือข่าย
สมาชิก · ติดตาม: 3 · ผู้ติดตาม: 2

อ่าน: 1103
ความเห็น: 1

สร้างรีโมตชัตเตอร์ด้วย ESP8266#2

ESP8266 Canon 1100D remote shutter

ต่อจากบันทึกก่อนหน้านี้

บันทึกนี้เรามาต่อกันที่การเขียนโค๊ด ซึ่งไม่ได้ยุ่งยากอะไรโดยสามารถนำตัวอย่าง Web server มาเขียนต่อ และนำเทคนิค Inline Images with Data URLs มาใช้เพื่อแทรกภาพลงในโค๊ดก็จะได้

#include <ESP8266WiFi.h>

//////////////////////
// WiFi Definitions //
//////////////////////
const char WiFiAPPSK[] = "1234567890";

const char s1[] = "<a href=\"/led/2\"><CENTER><BR><BR><BR><BR><img width=\"225\" height=\"225\" src=\"data:image/gif;base64,R0lGODdh4QDhAPcAAACP/////9nZ2QCM/wCN/wCK/6LO/9vb2/r8/4K3/wCC/9zo/9fX1/X6/wCE/3S0/9vs/wCH/+Xl5evr67nX//f39+Hh4QCR//Pz82Gq/8PZ6jKd/a3Q/1Sk/+71/+bj4ACU+vHt6M/m/+Px/0Ge/2aw/7TR7Xy9/yGX94+/6vv17dHa5cTh/5rJ/43F/4HA/0Sf822w742myXe27DiX416e4VCn9Fag/yGZ+621wpvG6GeazMHU32Gr8tne46nI6oW/8YOdrpSanJurujWI28XM0LnK22ui3gCG65S33mCSy63K4pbH7T+h8o+v3gCD3fHi2pWzztHKxGGk6zSW7LvZ8Gey7gB510mu+3+j06errDWZ5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAA4QDhAAAI/wADCBxIsKDBgwgTKlzIsGHCCRYmTDjAoKLFixUFWJAg0UJEDBUqOBxJsqTJkyhTqlwpsMIEDBxdcpRwQAADAQdy6tzJU4DPmzltbjzwcgLLo0iTKl16UuIBCzhr6vRJtarVq1iv6rRAVALTr2DDik1YgSODmjizql3LFitaihJFjp1Lt27DChgg5jzbtq9fvxRzcsRgt7DhsTCD/l3M2O9ZwYQPS55sEu+Em40za+5bk8FLyqBDF3TJdbPp02q3TpArurXdCqVRy56tlStr17iZYqBIu7dvn4GN5h6+kjTm38hpU4x4m7hzhnqTS//9VPjz6wbLTs/Ks7t3tNurev/GTt5l4O05LXwIEeKshvfw48v3wYD9Bwlppy9fTZ74bvDIHbBeCB9YUEQUMZxQgw0bNOjggw+CYAMNCaYghAQfrPcBehY01x9lsFH31IYrjKBBFk1QAcAAAFwAAAEAxCjjjDTK6CKMFwxwwRNYJLHACCsIGJtyOXn44WsT9cZAhh+ssAQHR6CARAE4uljjlVhi6eIABYDwxBEUaOBDhgDKRpSRR4qFwZCnLRmCCjoAUUMHIFiZ5Z145tniBjDMAAQGBPZWXZp0wXbcaR5NMEOUMV4Ao56QRpplAVuk4IMPHs3GgARoEnpUkqgJ+IEGLdDwop2SpqqqjQBc0UMLGgT/etpykXmqFE2hEphECTis6uuvM1qJQgdJqBBCmZkRZStSGOSnmU4azBABi8BWay2MDuywAlfIMnZAp8s2NNGh3lrAgww1uIiqtez6esEFOPQgw5Ld/qVs";
const char s2[] = "uCZJQC5jH0ihAwztBiwwARfAoIMRG5rmFb4OVbCvvR8w8MMTjwpscbsFoGDCmPW2VRO4DAcA0WYf+PADDe9erLLAPfww5sNtMdBhyAhNYFoIRZi67so8A1uwCcc+ax3NAl2WbMlZtNjz0gFHMIMPuDY2HtHaZdbkDzBUzPTWPhNABQVLasZfyB2zZYEGMOzM9dru1iDms2RbLcEPWrNt968XFNCDBwk3/xZuiI01WUMEat9teKSOomCE0d6C7BxUjYWQBAqFH245pBeAMIUKMK91gKeQLybBCEBQe/npvhJwBKbefntk6I59wAQKdaNuu6RU/BBCYxZ86KxfIVRx+/C/ghDFB2W7hV0Fv3tsgRO1Ey99nhfMwCZn14Hql3o9mD7993oO0EOBjA2Nm82iH1BD9OC3j2UNYdvruGH6Jl9Vk0Sw7/7+MxIAgwh968vUWvOfv4wKYPxLIJ5AoIEAeqxWobneWj4ggg3oT4EY3AAAF9M70WTELx8wAQgwSMI7gcAEDlxLRUITtb5QcIQljOGVQLBBwCxMMs0yoAZQIMMe1mgDDVyM+f/qUgH7UWVUVLigDxXovyACBoJ1gZ3ZfJDEJVoxRv6TmWM+Vxj0ccYCU1DiFTFYA+TZ0C67+QsYxThGDPZAip6DIlgA15cQzMB7bbQiAZzQHsDMbyVebEsIK5dHGRKgCinMyqYQw5e2WECEbCykAnfEAyNSRI5KgaNafIBASebxAk1gnCP/aJJAqlAFMfCkKmfAOb8M8ShF9IsEUoBHVY5xAClIZFYwuRL8uFADvbKlJ1HAA11epYNJcZgAPdAEYaqSADTwZV94iRJpsuUDMailM8dYgB8Y0yoz+xQIjbBNW14ACcV0JVI0qRUfNLOcqrzAFBpptk91rioSMAA8hXn/AQNYUy0DTAlgVhDMfaoSBUHymAAACTwrxJAAEXCARCdK0Ypa9KIYdUABMDiD3fXllQ1jp1VCGIESDuAGIoCASlfK0pa69KUwHUELtPm9CCzhm1QJZyk544MMxHAAHfAAXThA0+ldgAYircq9TJLUI1KAkNUagFSnStWqSlVSQBXqXIiKwRPi1CfIJEkO27KCd6rsAhlIq1rXyta0wjB8QR1qUb/XAx/4hZoJaapPPpACngG1JA+Y64yyKtcS5rIvYb3LPX+igg34tQOAFayMCLtVyUoPBK30HANIGQC9CuADOtjoyv5KksBCirJj4SoJC+CErz5lJLFsiwRK0DPS/zZkBBwgQSRRKxbVYvACNfhnVnS6EFNmJYRvVZltFQKBE4CAAJFcUVwrG0OvfvQuRvRBGGsL2YSMgAIg0CiWCGDVqUbgBlpN7bTKy972uveqFquBEYmLkDSy5QAaSK5yu1sQBIggASQoAE0H4IALPODACE6wCxpAFxYk+MEQjrCEJaxbgV3ABPY7AF4FIlysfGAGTFtuABDQghtcIALRI0ABFLABDoygATCOsYwZTBcEzPjGOM6xjmOcANEGLAYe9dwNE+IXFUCVXaRtgAgeAAAHpHijNzgBBIhWEgT02GIFUExqFqqQsU5wCZaNalANkAGIYonAIEgABdJL5ZFY2f/H7SIAEIK8Frx2+Coh6AHXQBBgOMsIohHYgAFGgIA2n+TNF4OBFJJ3gCGPxn7mcqzlVAwAEpxgBIZWCaItBoIl6JWLB7HvBJNw5NFGAAQPWHOmV7Jpix0hw7w0Lla0G92mOQAHFIAAje2CgF77utfDabXAaGDX+zq6JZ71wRVKzS5KW3rKdWnACFjwggyAIALYzrZGQdCBF1BgAR4oNGWEHbABiADSB4ntqLnGpQuomc1jwe0DLuCACFBpvAOIqAM6cAIK7Now5A5YD+jMHQ9pTy0hsMHWbm0ACIibLiJ4wXMHUOsVsagDBng4r698sXMGYLGNNogo1aICP6vMASz/KIwHWAACBZQ0qhJtAaY3bvJ2XUALeh0iPYfLg4qvSgELsAsLMiBgi0UABxmvS8ADBgS";
const char s3[] = "cUuTRggQx04BelxaQd7QDyMDMx7J0dgHXjJ4ryMjdwsmtUX0sLHcA0wpQAAPMpevX2kBC2TJkWVsFv5Je2tnDQoEVrS0CCxYL3K1lXbYMTcvHfarZgx4Wffq8WgV4gMaXMnhrJcHpXA4AHVMj9akz/isneHmk3iupCJBg8kmpfLXqOsqi9cUHCl88WAwg+jwRGKgPcAEHds8BA7zgAR0owLQgFYEH/Dv1HF8ZFYpteIGIWi0ryLveP6+UvusJ0BiHgAeOP+IGeAACLdiA/wJqXqMCnAD1LFE9sAYAgQcWzX4jWNvekyKCF+FJxSR4AfcXIoIS5C1PgMcU6vcrBbAAjLYwn2YC5Hcx84cUICBYG9UC0HYSLFAC93YnDiAClJd8KkMAM4BTMsNhgmQFj/dz1HcULqB2dxJoGrgSDWAAFHcnvJV+HKgyWEBwWOEV6oZwneR5SsECSlQAL6AUIpAjd2J+6IcSA+guVwB23CEAIbFYn0U5XNOAKtEAGTBXBOACTCECJKCFLXgUS5g6TqhIIcFoH7CADHiCKsECahgBQ/gVIoADRRUBJYB8atguRZA8HfJ8bnEAbGOFKfGFWQKHYjEC0JUlCjCBrFaDKv+jA04nAS10XOQkf2yIEiygAJOSAXNBAQtYAHcoho54MUDmSHoFWoF4iSdRAjRFACDAiGDRABaYJReQcjSYh9dyApmlSB6xWBiwA8zGLoJoEkU4KRxQFxDwXFgihKKIi9UCXIvGFnkhSHpmiUcxU+NFAls3FwaggjUyANp4i0xjAzunFRJxXwcQe1WoiiTRAKZ1JQ7gdoWxgBHAjm42ihYDRGXzFBKkVCvQgz64EiOgjDXiiodBe1gSgI3ojNWij5rVPHenAdIXkCohAt5II4ZoGBAwYJy4kEzjkKlREfsokanIEi5QezOSgYfhAR2gTQSThPfIkMACktwhkp5Dktb/uBLBdyUEgAPbaBcuQFOL6JFLQ5ObgXcluRIPeCVZt3+dWIjymBJjuCoEYJSaYQFVUFCytxID9gIwKRYioF8ywoyaho8CY5WZYQFLoJUUqYQXOVjHKBkNUGHfGIpSaZYBg5a8YwQ8lJNSqYk8GZeScQPRMwB2qYR42S6K41n3hZPruBIeAJhXQgGUQZhMeZiHlpjsggQ5cGeLgZR+iRIQIJk0MgCCCXCWWZdE2TOc6Zn24phbmRIjQJpwSRkdUJiYaRJTuSqLGTMjaUGheRINQJuTdZqFgQCpWZq5WWWaaS16aRXleHdFQATBaC3D6GYoOVlcKBkjQAJntpwksZuq//KcwAEUnvOPSakSBFmaxicZLFA45reaPEOeOCEz+1h2wXkSLcmUJABvdcEBUCmfK8NA++gZ6KiOsZkSoYclKmkY7iiUsKibzVktNoB4WkEUi/UB1fiYK9GNCRmHhTGQ+vOVDSGeqVJG+zgBrukTIXACJWiCLGGRZ4YDh8EC2RkjIpaZMpk6J4CD0NkRhhcE1Vkt1zkSHkCIV6IAtmgX+3klERCVd7mjvtJ0bHEWk+hhOpCeUnkCNAWKJKoUI/CWMxIBYRilS3MBQ/BVFuCHWlEEWpoS1pcllFkXD0B+4PiTOso00Xl3q8FoFhBmwmiPI9EAt3lm4ciNRVUA2ymgKv/Tj1XRIQ6zjx8wpMBSpCRxkoUIomExAnRIi0tallKaKudUhlixWTuYFSGgIhzKEpF5hGX6FSVwozECikhhophDBT6qVJsVACsqACGABfmpoLJ6Kq+qFCm4gniKmKGaKjaQq/gkEKeYBIBKpIJKEsmoP+D4qUkRlCt4AnhYWz/wae/XFguwrDCaFNiYJToSoSvBrVlCMOyqrD1TAO13X8LBplcxAn3ZliyBhVpIABTwpbdVAmJamsbJqAJDBSvgfgHgZdBnVtO3FBBQsP0zAA8Qrw6BAAaAA8MaI8XnlPLKM03AfKlhHXrlAxsasUuxoHjSJYFnEhDAioIFUf6JsHH/dgSIRRAWehUfQGoJWq";
const char s4[] = "t1micQ5QAS2AAkKm0UsAHidX8AUKziyDMU4HSgJjKOxJc/ixQeQHTEBwAZ8AIcwAIvJm5KxgIckADXFmYEcLDNyDM4UAU5RxC9egDR96KRYqkp0QAnNnoUdwEkcAM30AEdcAMjpGLRpQAtABa2micw4AP242j2g01XmxSEuqzQVbmqAl2LKoATqioXsAOuZRAQOVI6QLeQYrcqMQIZ0LEXAyNQqrnmqiedeV+ZNxD60hYY8Lp1W60uSLCkS3zmxnWbmyoFoAIxc2wHV6oqoKo9Y7oswQIB1jPk1Z7Ai7t3QgPOShVLNRCn6mEz0Lt4wrws/zECsTqtkUI4HCCwT2sxBCADXwWFB9GrAgAB/CoWDZC0CkC+74ptUkZzZ1WvdFczr4egKgO+SUEBGXBi+ItFUmVpIIu4wQspBFADJMsdIIWv4AQEKgtwERdgwxc+BVBgJcABGCt4D6wnF3B5DHsQkJaVy6u7YeEBC/ACHXABCqBRbCdVbBdR4wcCGZBrDTy9F7MBPOBZCgG/edbCroEAEMABv5dgJ+ACFCACP8y/FjNwfXFsBOGwx6UDCVy6LrxqoGoxAwCJ07QQUgiF1HsnBAzGeSowIMA898UA0FFHDrUya8zGzJnGNPKB17UQFqxUGkCpXozHYZG4NYIDcxdHDf+RbD3gvTVyx4ScsSX8rjHgWYn1EC4kQgM8wpFspu1SeM2HXVdsA448pi1AAaicyqq8yqysygbwyrAcy7I8y7Rcy7Z8y7icy7ncpOxSAu1LXwrhqPfDBHrMk5V7zMiczMr8XszczM78zNBcXqUMABFAxrJFEsrUFslrUNxMBbu4FpzVWS70A9xsUOGasyWhxVkBe+VcTqxXxkyVyWLZznkEAoiEzqVkRBIgwPTcRsAFv9mLzZ71AT3Xz5I0AOnUeihhd3hWxwbdRh2lTioxUPv60Ev0BHt6d1O70GecT4Js0cNzAd50V0fhWQeAsiDtQ3U1X0jB0CO1AvOc0vsDAtv/QtJIAb+fpQOqK9PEUwAofMVKkc1tMQEpy9Pu0wMuLR7hzBCMOSoVbdTfgwNO5EhMsb3HRUtQDT641L44sdTi4hgq4NBZTTxW8M1rAVIl/Rf4Oda3s7hqpCYZDU75xdao05Nuyxm7KhZJfT9V8NF0bXMo9BdonUyMWR8z4Nd/DSwgkALXq1SXDBZ/fEzdk9hsAwJMwJg4sWFKsdfY+wHbRdlrZwJQIESGYURg5QMb0MWgfVo9MNpvbRhWfVxoM82rPVmVbNo+4dUsoc5q0SQwoNq1zZQncLyeo9tHcaUT5AN1EtxIZgMjI9ihYRMGJEKIzdwDAAM1/dqgsXmCJAJI/8DcvzIATTACXA0cxh3UuP1ZRZDa4J0q/rMC5f0U570UY3dNGlBF7X192F3eNjHYksHZ90Nr+Y0nAzAFrEPaxGEBZ5xTnk3bIK035GMv/g0ijfEUh+3g/XwBQCDMbvHYuZHeLGoCbJnfG1AFja08/YHZR1QFWTPgADAF8F3hR8LdiOUDd9TeIDACO4uO820YKk4VKpACT03ZMBDXYecpsa1Co1IDwL1PeWMD2c0YwPw6VjMBKVDd5YQEP8A3FT67y4LcLsQDPYDl8dQDCe0tXh4ulwHin2UBFACQII10ApIsY0Mza241Nk4wIB0BVrACOH13DKDZnkLcfxECPKAEMf8NTxICNGxenxO+LIaiGfdRBanUzj3AAhiyGRGBx0XU6Hv1SE2w09wEAy7D34Deybw6KypgAj2wnoXkijbABCpg6leBxWzM23/hJksQA0NuRRfQMmNiGjLz6IZG44FjASswA0vpQzlSADFQBRxjGpeE6u/r6Ur1ASqwBD3Q6/yDA0rABOxh7dhr69TesFKBGuuhAUAw5hg+MBdgA0CASLTuFgJA7JFcFgtuij4AATPQBBdoO48yAChgBSKAKT8OUFNe7gaxJr6B7dkeAx2wAWTuLsPSA0AgAbMu7ne3pgoPW4S+GTeRISugA";
const char s5[] = "RwQAwxSdBNvI1bCJRvQBDEQJvCNPPn/7ko9TsjGHirqcSkjsABOAANPkCM3UpCJiEWn8mc2UgBIQAU98iOMWyAaf6Ea1vEpcfO9oSH3IQQpcAI9wCAQ0vUbQARNYAM9cAIzoANLUAQZYh/oEfVSrxLG8fToiCEE4gM8IB92rwFF0PT2wS3hURPM0fYtPfNm8h3fER5uIeiAXxLRYfiMf5X2nvglQRqNP/m+yfGQjxhQAfeU/yyWf/mFkimbz/hn8feeD9uLH/rIYaUgUfqgkReCj/ofhfisTxeJofmNLxg1P/tfkRd8b/uz8RYfkfu6HxYhIYlnYZ6o/xaeIQGyP/y5URa7wS2+nxp+v6Z17vw0gwEwsRE2KDEVGTEVUK8YQLEXjfYR14/9YBwSMpEoEPFB4nERjaaiGwESIeH5AQEAOw==\" /><BR>Take picture</a><BR><BR><a href=\"/led/1\">Hold shutter</a><BR><BR><a href=\"/led/0\">Release shutter</a></CENTER>";

/////////////////////
// Pin Definitions //
/////////////////////
const int RM_SHUTTER = 2; //
//const int RM_FOCUS = 0; //

unsigned long time0, time1;

WiFiServer server(80);

void setup()
{
  initHardware();
  setupWiFi();
  server.begin();
  time0 = millis();
}

void loop()
{
  time1 = (millis() - time0)/1000;
  if (time1 > 600) // 10 Min
  {
    ESP.deepSleep(36000 * 1000000); // 10 Hr
  }
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Read the first line of the request
  String req = client.readStringUntil('\r');
  Serial.println(req);
  client.flush();

  // Match the request
  int val = -1; // We'll use 'val' to keep track of both the
                // request type (read/set) and value if set.
  if (req.indexOf("/led/0") != -1)
    val = 0; // Will write LED low
  else if (req.indexOf("/led/1") != -1)
    val = 1; // Will write LED high
  else if (req.indexOf("/led/2") != -1)
    val = 2; // Will write LED high and then low
  else if (req.indexOf("/read") != -1)
    val = -2; // Will print pin reads
  // Otherwise request will be invalid. We'll say as much in HTML

  // Set GPIO5 according to the request
  if (val == 0)
  {
    digitalWrite(RM_SHUTTER, LOW);
    //digitalWrite(RM_FOCUS, LOW);
    time0 = millis();
  }else if (val == 1)
  {
    digitalWrite(RM_SHUTTER, HIGH);
    //digitalWrite(RM_FOCUS, HIGH);
    time0 = millis();
  }else if (val == 2)
  {
    //digitalWrite(RM_FOCUS, HIGH);
    //delay(2000);
    digitalWrite(RM_SHUTTER, HIGH);
   
  }
  client.flush();
  // Send the response to the client
  client.print(s1);
  client.print(s2);
  client.print(s3);
  client.print(s4);
  client.print(s5);
  delay(1);
  Serial.print("Val = ");
  Serial.println(time1, DEC);
  Serial.println("Client disonnected");

  if (val == 2)
  {
    delay(2000);
    digitalWrite(RM_SHUTTER, LOW);
    //digitalWrite(RM_FOCUS, LOW);
    time0 = millis();
  }

  // The client will actually be disconnected
  // when the function returns and 'client' object is detroyed
}

void setupWiFi()
{
  WiFi.mode(WIFI_AP);

  // Do a little work to get a unique-ish name. Append the
  // last two bytes of the MAC (HEX'd) to "Thing-":
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.softAPmacAddress(mac);
  String macID = String(mac[WL_MAC_ADDR_LENGTH - 2], HEX) +
                 String(mac[WL_MAC_ADDR_LENGTH - 1], HEX);
  macID.toUpperCase();
  String AP_NameString = "CANON1100D_" + macID;

  char AP_NameChar[AP_NameString.length() + 1];
  memset(AP_NameChar, 0, AP_NameString.length() + 1);

  for (int i=0; i<AP_NameString.length(); i++)
    AP_NameChar[i] = AP_NameString.charAt(i);

  WiFi.softAP(AP_NameChar, WiFiAPPSK);
}

void initHardware()
{
  Serial.begin(115200);
  digitalWrite(RM_SHUTTER, LOW);
  //digitalWrite(RM_FOCUS, LOW);
  pinMode(RM_SHUTTER, OUTPUT);
  //pinMode(RM_FOCUS, OUTPUT);
  // Don't need to set ANALOG_PIN as input,
  // that's all it can be.
}

 

ลองไปทำดูนะครับ เพียงเท่านี้เราก็จะมี Remote shutter ใช้งานเองโดยเวลาถ่ายภาพตัวเอง ภาพหมู่จะไม่ต้องวิ่งไปวิ่งมาเพื่อตั้งเวลา หรือต้องมีคนหนึ่งหายไปจากภาพ เพราะต้องไปอยู่หลังกล้อง :)

หมวดหมู่บันทึก: พัฒนางานประจำ
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 09 มกราคม 2560 17:33 แก้ไข: 09 มกราคม 2560 17:33 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

Ico48
peterpen [IP: 139.167.118.138]
09 เมษายน 2562 14:41
#108660

Many many thanks for given the amazing aericle i have agree visit the how to get free robux here you fully guide and you can easily play this game i am sour.

ร่วมแสดงความเห็นในหน้านี้

ชื่อ:
อีเมล:
IP แอดเดรส: 54.87.61.215
ข้อความ:  
เรียกเครื่องมือจัดการข้อความ
   
ยกเลิก หรือ