土斯 发布的文章

编程绘画 安卓编程软件 废旧安卓变废为宝

编程绘画 是一款 可单机可在线的编程系统,轻松的编程体验,终身免费。通过ID 绑定即可实现 在线web 编程 一键运行到安卓端
使用模式:

  1. 在线编程 安卓端绘画
  2. 安卓端编程,安卓端绘画
  3. A安卓端编程,B安卓端绘画

安卓端下载地址
程序截图
A10A9B2E7C359CEFE716C3622D902AD3.jpg
FC93182F7A066F4376D1FFBCBBCEFD4B.jpg
在线编程截图
屏幕快照 2020-05-11 下午8.55.43.png

【编程绘画】触摸的使用

fileMonitor 检测文件变化 执行脚本

检测文件发生变化 启动脚本并传入 变化的文件名用于 修改同步 文件到ftp adb linux 等 代码同步修改
源码下载地址
FileMonitor2.0exe
使用时 把 需要执行的脚本拖动到 fileMonitor 即可
需要执行的代码 通过%1%获取 变动的文件路径 具体干什么看具体需求
mac端 稍后更新上来
代码贴出来

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Threading;

using System.Diagnostics;
namespace FileMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            string File2;
            if (args.Length<1)
            {
                Console.WriteLine("请输入要执行的文件....");
                File2 = Console.ReadLine();
            }
            else File2 = args[0];
            Console.WriteLine("监控目录[" + AppDomain.CurrentDomain.BaseDirectory + "]" + "执行文件[" + File2 + "]");
            FileSystemWatcher watcher = new FileSystemWatcher();
            watcher.Path = AppDomain.CurrentDomain.BaseDirectory;
            watcher.NotifyFilter =NotifyFilters.LastWrite |NotifyFilters.FileName;
            watcher.Changed += (object source, FileSystemEventArgs e) =>
            {
                Console.WriteLine("文件{0}已经被修改,修改类型{1}", e.FullPath, e.ChangeType.ToString());
                //System.Diagnostics.Process.Start(File2);
                exec(File2, e.FullPath);
            };
            watcher.Created += (object source, FileSystemEventArgs e) =>
            {
                Console.WriteLine("文件{0}被建立", e.FullPath);
            };
            watcher.Deleted += (object source, FileSystemEventArgs e) =>
            {
                Console.WriteLine("文件{0}已经被删除", e.FullPath);
            };
            watcher.Renamed += (object source, RenamedEventArgs e) =>
            {
                Console.WriteLine("文件{0}的名称已经从{1}变成了{2}", e.OldFullPath, e.OldName, e.Name);
            };
            watcher.EnableRaisingEvents = true;
            while (true) Thread.Sleep(1000);
        }
        public static void exec(string exePath, string parameters)
        {
            Process process = new System.Diagnostics.Process();
            process.StartInfo.FileName = exePath;
            process.StartInfo.Arguments = parameters;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.Start();
            process.BeginOutputReadLine();
            process.OutputDataReceived += new DataReceivedEventHandler(processOutputDataReceived);
            process.WaitForExit();
            process.OutputDataReceived -= new DataReceivedEventHandler(processOutputDataReceived);
            Console.WriteLine("执行完毕");
        }

        public static void processOutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Console.WriteLine(e.Data);
        }
    }
}

微信截图_20200508105631.png

openwrt 操作IIC

img_3075-removebg.png
img_3082-removebg.png

固件内置了i2ctools软件包

  1. 用i2cdetect -l 命令来列出所有I2C总线
    root@Widora:/# i2cdetect -l
    i2c-0 i2c 10000900.i2c I2C adapt
  2. 用i2cdetect -F 0 来查看I2C 0号总线启用的功能

    root@Widora:/# i2cdetect -F 0
    Functionalities implemented by /dev/i2c-0:
    I2C yes
    SMBus Quick Command yes
    SMBus Send Byte yes
    SMBus Receive Byte yes
    SMBus Write Byte yes
    SMBus Read Byte yes
    SMBus Write Word yes
    SMBus Read Word yes
    SMBus Process Call yes
    SMBus Block Write yes
    SMBus Block Read no
    SMBus Block Process Call no
    SMBus PEC yes
    I2C Block Write yes
    I2C Block Read yes

  3. 查看I2C 0号总线上挂载的设备

    root@Widora:/# i2cdetect -y 0
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: -- -- -- -- -- -- -- --

其中标识为UU的设备(地址分别为0x1a和0x34)表示内核已经加载了相应的驱动,而地址为0x48的I2C设备尚未被内核所驱动。

  1. 在sysfs文件中可查看已被内核驱动的I2C设备的名称

     root@Widora:/# ls /sys/bus/i2c/devices
     0-001a  0-0034  i2c-0
     root@Widora:/# cat /sys/bus/i2c/devices/0-001a/name
     wm8960
     root@Widora:/# cat /sys/bus/i2c/devices/0-0034/name
     codec_wm8960
    
  2. 用i2cdump -y 0 0x48 W 命令来读取地址为0x48的I2C设备(LM75温度传感器)所有寄存器中的内容
 root@Widora:/# i2cdump -y 0 0x48 W
    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef
    00: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
    10: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
    20: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
    30: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
    40: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
    50: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
    60: 1e 00 4b 00 ff ff ff ff 1e 00 4b 00 ff ff ff ff    ?.K.....?.K.....
  1. 用i2cget -y 0 0x48 0 w 命令来读取地址为0x48的I2C设备0号寄存器中的内容

K210 例程

20200424105607.png

扫描IIC设备

from machine import I2C
i2c = I2C(I2C.I2C0, freq=100000, scl=28, sda=29)
devices = i2c.scan()
print(devices)

PWM

from machine import Timer,PWM
import time

tim = Timer(Timer.TIMER0, Timer.CHANNEL0, mode=Timer.MODE_PWM)
ch = PWM(tim, freq=500000, duty=50, pin=board_info.LED_G)
duty=0
dir = True
while True:
    if dir:
        duty += 10
    else:
        duty -= 10
    if duty>100:
        duty = 100
        dir = False
    elif duty<0:
        duty = 0
        dir = True
    time.sleep(0.05)
    ch.duty(duty)

实时拍照

   import sensor
    import image
    import lcd
    lcd.init()
    sensor.reset()
    sensor.set_pixformat(sensor.RGB565)
    sensor.set_framesize(sensor.QVGA)
    sensor.run(1)
    while True:
        img=sensor.snapshot()
        lcd.display(img)

找颜色

import sensor
import image
import lcd
import time
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
green_threshold   = (0,   80,  -70,   -10,   -0,   30)
while True:
    img=sensor.snapshot()
    blobs = img.find_blobs([green_threshold])
    if blobs:    
        for b in blobs:
            tmp=img.draw_rectangle(b[0:4]) 
            tmp=img.draw_cross(b[5], b[6]) 
            c=img.get_pixel(b[5], b[6])
    lcd.display(img)

显示fps

import sensor
import image
import lcd
import time

clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
sensor.skip_frames(30)
while True:
    clock.tick()
    img = sensor.snapshot()
    fps =clock.fps()
    img.draw_string(2,2, ("%2.1ffps" %(fps)), color=(0,128,0), scale=2)
    lcd.display(img)

扫描二维码

import sensor
import image
import lcd
import time

clock = time.clock()
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_vflip(1)
sensor.run(1)
sensor.skip_frames(30)
while True:
    clock.tick()
    img = sensor.snapshot()
    res = img.find_qrcodes()
    fps =clock.fps()
    if len(res) > 0:
        img.draw_string(2,2, res[0].payload(), color=(0,128,0), scale=2)
        print(res[0].payload())
    lcd.display(img)

古人很容易开发预知能力,而现在人却很难

人类拥有第三只眼,称为松果体,早在7万多年前就开始进化出现,松果体不仅有控制激素分泌生物钟等功能,还可以观看眼睛看不到的东西,例如磁场能和量子能 红外能 等等,而灵魂也是某种能量物质的一种呈现方式,松果体在人类出生后的几个月发育到最大,随后越长大越萎缩,得到开发的人便有了预知能力,像 袁天罡 诸葛亮刘伯温爱因斯坦特斯拉等都是松果体开发比较好才会拥有平常人没有的超能力,松果体作为唯一与灵魂连接的地方,过度开发如果控制不好容易被鬼魔缠身,现在伟人少 是因为 人类过于忙碌 加上不规律的生活及各种垃圾食品导致松果体钙化或变质导致无法感知宇宙世界。
刚出生的小孩和一些动物都能感受到人类感受不到的惊吓也是源于此。

烧饼歌

明太祖一日身居内殿,食烧饼,方啖一口,内监忽报刘基进见,太祖以碗覆之,始召基入。
帝问曰:“先生深明数理,可知碗中是何物件?”
  基乃捏指轮算,对曰:“半似日兮半似月,曾被金龙咬一缺,此乃饼也。”
开视果然。帝即问以天下后世之事若何。
基曰:“茫茫天数,我主万子万孙。何必问哉。”
  帝曰:“虽然自古兴亡原有一定,况天下非一人之天下,惟有德者能享之。言之何妨?试略言之。”
  基曰:“泄漏天机,臣罪非轻!陛下恕臣万死,才敢冒奏。”
帝即赐以免死金牌,基谢恩毕。
基曰:“我朝大明一统世界,南方终灭北方终,嫡裔太子是嫡裔,文星高拱日防西。”
  帝曰:“朕今都城竹坚守密,何防之有?”
  基曰:“臣见都城虽巩固,防守严密。似觉无虞,只恐燕子飞来。
随作歌三首:
  “此城御驾尽亲征,一院山河永乐平;
  秃顶人来文墨苑,英雄一半尽还乡。
  北方胡虏残生命,御驾亲征得太平;
  失算功臣不敢谏,旧灵遮掩主惊魂。
  国压瑞云七载长,胡人不敢害贤良;
  相送金龙复故旧,灵明日月振边疆。”
  帝曰:“此时天下若何?”
  基曰:“天下大乱矣。”
  帝曰:“朕之天下,有谁乱者?”
  基曰:
“天下饥寒有怪异,栋梁龙德乘婴儿;
禁宫阔大任横走,长大金龙太平时;
老拣金精尤壮旺,相传昆玉继龙堂;
阉人任用保社稷,八千女鬼乱朝纲。”
  帝曰:“八千女鬼乱朕天下者何?”
  基曰:
“忠良杀害崩如山,无事水边成异潭;
救得蛟龙真骨肉,可怜父子难顺当。”
  帝曰:“莫非父子争国乎?”
  基曰:“非也!
树上挂曲尺,遇顺则止。
至此天下未已。”
帝曰:“何谓未已?”
  基曰:
“万子万孙层叠层,祖宗山上贝衣行;
公侯不复朝金阙,十八孩儿难上难。”
基又曰:
“木下一了头,目上一刀一戊丁;
天下重文不重武,英雄豪杰总无春;
戊子已丑乱如麻,到处人民不在家;
偶遇饥荒草寇发,平安镇守好桂花。”
  帝曰:“偶遇饥荒,平常小丑!天下已乎?”
  基曰:
“西方贼拥乱到前,无个忠良敢谏言;
喜见子孙耻见日,衰颓气运早升天;
月缺两二吉在中,奸人机发去西东;
黄河涉过开金阙,奔走梅花上九重。”
  帝曰:“莫非梅花山作乱乎?从今命人看守何如?”
  基曰:“非也!
‘迁南迁北定太平,辅佐帝王有牛星;
运至六百半,梦奇有字得心惊。’”
  帝曰:“有六百年之国祚,朕心足矣。尚望有半乎?”
  帝又曰:“天机卿难言明,何不留下锦囊一封,藏在库内。世世相传勿遗也,急时有难,则开视之。可乎?”
  基曰:“臣亦有此意。
‘九尺红罗三尺刀,劝君任意自游遨;
阉人尊贵不修武,惟有胡人二八狄。’
臣封柜内,俟后开时自验!
基又曰:
“桂花开放好英雄,拆缺长城尽孝忠;
周家天下有重复,摘尽李花枉劳功。
黄牛背上鸭头绿,安享国家珍与粟;
云盖中秋迷去路,胡人依旧胡人毒;
反覆从来折桂枝,水浸月宫主上立;
禾米一木并将去,二十三人八方居。”
  帝曰:“二十三人乱朕天下?八方安居否?”
  基曰:“臣该万死,不敢隐瞒,至此大明天下亡之久矣。”
  帝大惊,即问:“此人生长在何方?若何衣冠?称何国号?治天下何如?”
  基曰:
“还是胡人二八秋,二八胡人二八忧;
二八牛郎二八月,二八嫦娥配土牛。”
  帝曰:“自古胡人无百年之国运,乃此竟有二百余年之运耶?”
  基曰:
“雨水草头真主出,赤头童子皆流血;
倒置三元总才说,须是川水页台阙;
十八年间水火夺,庸人不用水火臣;
此中自己用汉人,卦分气数少三数;
亲上加亲又配亲。”
  帝曰:“胡人至此,用人水夺火灭,亲上加亲,莫非驸马作乱乎?”
  基曰:“非也!胡人英雄,水火既济,安享太平,有位有势。时值升平,称为盛世,气数未尽,还有后继。
‘宝剑重磨又重磨,抄家灭族可奈何;
阉人社稷藏邪鬼,孝弟忠奸诛戮多;
李花结子正逢春,牛鸣二八倒插丁;
六十周甲多一甲,螺角倒吹也无声;
点画佳人丝自分,一止当年嗣失真;
泥鸡啼叫空无口,树产灵枝枝缺魂;
朝臣乞来月无光,叩首各人口渺茫;
一见生中相庆贺,逍遥周甲乐饥荒。’”
  帝曰:“胡人到此败亡否?”
  基曰:“未也!虽然治久生乱,值此困苦,民怀异心,然气数未尽也。
‘廿岁力士开双口,人又一心度短长;
时俺寺僧八千众,火龙渡河热难当;
叩首之时头小兀, 娥虽有月无光;
太极殿前卦对卦,添香禳斗闹朝堂;
金羊水猴饥荒岁,犬吠猪鸣汨两行;
洞边去水台用水,方能复正旧朝网;
火烧鼠牛犹自可,虎入泥窝无处藏。
草头家上十口女,又抱孩儿作主张;
二四八旗难蔽日,辽阳思念旧家乡;
东拜斗,西拜旗,南逐鹿,北逐狮;
分南分北分东西,偶逢异人在楚归;
马行万里寻安歇,残害中女四木鸡;
六一人不识,山水倒相逢。
黄鬼早丧赤城中,猪羊鸡犬九家空;
饥荒灾害皆并至,一似风登民物同;
得见金龙民心开,刀兵水火一齐来;
文钱斗米无人要粜,父死无人兄弟抬;
金龙绊马半乱甲,二十八星问士人;
蓬头少女蓬头嫁,揖让新君让旧君。’”
  帝曰:“胡人至此败亡否?”
基曰:“手执钢刀九十九,杀尽胡人方罢休;
可怜难渡雁门关,摘尽李花灭尽胡;
黄牛山下有一洞,可投拾万八十众;
先到之人得安稳,后到之人半路送;
难恕有罪无不罪,天下算来民尽瘁。
火风鼎,两火初兴定太平;
火山旅,银河织女让牛星。
火德星君来下界,金殿楼台尽丙丁;
一个胡子大将军,按剑驰马察情形;
除暴去患人多爱,永享九州金满盈。”
  帝曰:“胡人此时尚在否?”
  基曰:“胡人至此,亡之久矣。
‘四大八方有文星,品物咸亨一样形;
琴瑟和谐成古道,左中兴帝右中兴;
五百年间出圣君。
周流天下贤良辅,气运南方出将臣,
圣人能化乱渊源,八面夷人进贡临,
宫女勤针望夜月,乾坤有象重黄金,
北方胡掳害生灵,更会南军诛戮行,
匹马单骑安国外,众君揖让留三星,
上元复转气运开,大修文武圣主裁,
上下三元无倒置,衣冠文物一齐来,
七元无错又三元,大开文风考对联,
猴子沐盘鸡逃架,犬吠猪鸣太平年,
文武全才一戊丁,流离散乱皆逃民,
爱民如子亲兄弟,创立新君修旧京。’
千言万语知虚实,留与苍生长短论。”
屏幕快照 2020-02-09 上午11.37.07.png

利用树莓派结合datamark 实现远程移动监控

请输入图片描述

#encoding=utf-8
import cv2
import time
from poster.encode import multipart_encode
import urllib2
import os,shutil
import sys
from urllib2 import Request, urlopen, URLError, HTTPError
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import datetime
import socket
import time

DATAMARK=1
TLINK=2
GIZWITS=3
print "open video0"
cap=cv2.VideoCapture(0)
print cap
pre_frame = None
def post(file):
    register_openers()
    f=open(file, "rb")
    datagen, headers = multipart_encode({"myFile": f})
    request = urllib2.Request("http://trtos.com/web/datamark/upload.php", datagen, headers)
    try:
        response = urllib2.urlopen(request)
        print response.read()
         
    except URLError,e:
        print e.reason
        print e.code




def send(context,name,id):
   if name==DATAMARK:
       context=context+"\n"
       ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
       ss.connect(('trtos.com',80))
       msg="POST /php/api.php?id="+id+" HTTP/1.1\n"+ \
            "Content-Type: application/x-www-form-urlencoded\n"+ \
            "Host: trtos.com\n"+ \
            "Content-Length: "+str(len(context))+"\n"+ \
            "Expect: 100-continue\n"+ \
            "Connection: Keep-Alive\n\n\n"+context
       ss.sendall(msg)
       ss.close()
       print msg
   elif name==TLINK:
       ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
       ss.connect(('tcp.tlink.io',8647))
       time.sleep(1)
       ss.sendall(id)
       time.sleep(1)
       ss.sendall(context)
       ss.close()
       print id,context,name
   elif name==GIZWITS:
       print "机智云"
      
while(1):
    ret,frame=cap.read()
    curframe=frame.copy()
    k=cv2.waitKey(1)
    gray_img=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    gray_img=cv2.resize(gray_img, (500, 500))
    gray_img=cv2.GaussianBlur(gray_img, (21, 21), 0)
    if pre_frame is None:
        pre_frame = gray_img
    else:
        img_delta = cv2.absdiff(pre_frame, gray_img)
        thresh = cv2.threshold(img_delta, 25, 255, cv2.THRESH_BINARY)[1]
        thresh = cv2.dilate(thresh, None, iterations=2)
        thresh,contours, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
        for c in contours:
            if cv2.contourArea(c) < 3000:
                 print cv2.contourArea(c)
                 continue
            else:
                 (x,y,w,h) = cv2.boundingRect(c)
                 cv2.rectangle(curframe,(x,y),(x+w,y+h),(0,255,0),2)
                 cv2.imwrite("5uT5zGTG.jpg",curframe)
                 post("5uT5zGTG.jpg")
                 shutil.move("5uT5zGTG.jpg","/home/pi/record/"+datetime.datetime.now().strftime('%Y_%m_%d_%H_%M_%S')+".jpg")
                 send("area:"+str(cv2.contourArea(c)),DATAMARK,"5uT5zGTG")
    pre_frame = gray_img
    time.sleep(1)
cap.release()`

python-opencv环境搭建

使用ubuntu18.2 系统或者其他系统
默认会安装python2.7
sudo apt install python
sudo apt install python-opencv
sudo apt install python-pip2019-11-23 18-12-21 的屏幕截图.png

DataMark 云便签 API

地址 http://dm.trtos.com/

JSON 操作 DataMark 数据项

地址:http://dm.trtos.com/php/json.php
Post 添加数据
{"action":"add","id":"y9JM9Rd","content": [{"name": "项目1","value": "5555"},{"name": "项目2","value": "1234"}]}
返回
{"action":"add","status":"succeed"}
Post 删除所有数据
{"action":"del","id":"y9JM9Rd"}
返回
{"action":"del","status":"succeed"}
Post 获取分配ID
{"action":"getid"}
返回
{"action":"getid","id":"y9JM9Rd"}
Post 获取记录(必要参数id,可选参数name,value)
{"action":"get","id":"y9JM9Rd"}
{"action":"get","id":"y9JM9Rd","name":"项目1"}
{"action":"get","id":"y9JM9Rd","name":"项目1","value":"5555"}
返回
[{"Name":"Name1","Value":"xiaowu"},{"Name":"Name2","Value":"Xiaotian"}]

上传背景图代码 可用于监控
微信截图_20200703145710.png

#!usr/bin/python
# image.py
# -*- coding=utf-8 -*-
from poster.encode import multipart_encode
import urllib2
import sys
from urllib2 import Request, urlopen, URLError, HTTPError
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
  
register_openers()
f=open("4UTmPcpw.jpg", "rb")

datagen, headers = multipart_encode({"myFile": f})
request = urllib2.Request("http://trtos.com/web/datamark/upload.php", datagen, headers)
try:
    response = urllib2.urlopen(request)
    print response.read()
     
except URLError,e:
    print e.reason
    print e.code

修改数据标签 指定选项内容
这种方式比较简单 直接通过浏览器访问方式操作
微信截图_20200703152045.png
eg:设置名和值 http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717&name=使用率&value=99%
eg:设置名 http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717&name=使用率
eg:获取名和值 http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717
下例 是使用python 上传 ip地址

import requests
import datetime
import socket
def get_host_ip():
    """
    查询本机ip地址
    :return: ip
    """
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

hostname = socket.gethostname()
ip = socket.gethostbyname(hostname)
ip="0.0.0.0"
ip=get_host_ip()
date=datetime.datetime.now()
response = requests.get('http://dm.trtos.com/web/datamark/update.php?id=5oOeooHz&index=149717&name=树莓派IP&value='+ip+":"+str(date))
print(response.text)


共享变量

设置值 http://www.trtos.com/php/value.php?name=my_value&value=123456
读取值 http://www.trtos.com/php/value.php?name=my_value

极客虫

15年的一个众筹项目,失败了。

https://github.com/tongjinlv/TRTOS.git
_20191108143604.jpg
微信图片_20191108143556.jpg
原理图
QQ截图20191108144434.png
PCB截图

QQ截图20191108145330.png

代码地址 https://github.com/tongjinlv/TRTOS.git
硬件下载地址 使用Altium Designer 16 开发 https://github.com/RTOS-Developers/Geekinsect-Handware.git
GeekInsect(IDE).zip

24058711_1139850856152505_7019318682367256450_n.jpg

1、项目背景

对于目前市面上的智能玩具功能单一,不具备扩展性,多以几个可选动作或循环几个动作为主,很古板单调,玩一段时间就疲倦乏味,这就是我们要开发这款可编程极客虫的原因,在玩的同时对提高编程思维能力有所帮助,并且非常适合用来开发儿童的创意性思维,极客虫也是一套极适合用来开发仿生机器人的硬件,携带的传感器完全可以实现趋光跟随避障和循迹等动作。

2、我想要做什么

极客虫是我们的第一款硬件产品既可以用来做编程练习又可以增加乐趣,我们已经尽可能的把体验做到极致。

1、灵活:两侧一对空心杯电机提供整只虫子的动力,极其灵活,可以实现原地旋转和任意方向爬行。

2 小巧:整体尺寸仅为3.9cm6.2cm2cm,大概只有两个多硬币大小,放置在大小刚刚好的碳化竹收藏盒内,刚好合适,方便随身携带。

3、方便:固件更新、应用下载、调试、充电等都通过尾部的micoUSB接口,内部固化的BOOT引导程序加上usb复位重启机制使之不可能死机。配套的固件开发环境支持F5一键下载固件,免去了使用stlink下载的繁琐,配套的拖拽式开发环境可以一键下载应用无需重启直接运行,无需任何设置。

4、集成化设计:所有传感器均集成到主板,保证了体积小高可靠性。

4、非常容易上手的集成拖拽式开发环境。

3、产品面向的用户群体

我们的用户群体:所有对仿生机器人、玩具开发有兴趣的人或以教学为目的的组织机构。

极客虫涉及到的软硬件都是我们自己研发的,没有使用任何开源组件:

极客虫运行的是我们自主开发的开源操作系统TRTOS,一直应用于工业设备开发,稳定性和灵活性很高,上手也非常容易。并已经开发出成熟的深度应用us级别解析器,多任务动态创建,配合拖拽式编程开发环境Geekinsect(IDE),就算你不会编程也能分分钟写出应用,Geekinsect(IDE)集成了固件和应用联网同步共享功能,联合MDK开发环境实现编译完成即刻共享。

4、产品的亮点、如何使用产品

我们的宗旨就是体验,质量,美感一个也不能少,始终把体验放在第一位,尽量保证在不需要说明书的前提下都能够直接使用。

用户在收到极客虫后登陆收纳盒上的网址,下载拖拽式开发环境并连接极客虫到电脑即可进行拖拽式开发,想了解更多或对其进行深层次的开发请加技术支持群或访问TRTOS主页。

5、项目的困难和风险

  1. 在进行电源设计的时候刚开始为了效果好用了DCDC,最后发现都没有手册上的描述的效果好,就后就换成了数字部分LDO供电其他部强供电。
  2. 由于考虑到拨动开关影响外观,用一个按钮做开关机和功能复用键,关机0功耗,在关机模式下usb能强制唤醒和复位,用来保证不可能成为板砖,为了这部分电路打了两次板调试了很久,最后终于获得满意的效果;
  3. 为了保证普通用户能够方便使用,单独开发了一套BOOT固件和BOOT升级APP可以嵌入到MDK中使用。